MadMyche
Проблема, с которой вы столкнулись, не является полностью основанный на коде, это проблема с использованием зарезервировано/специальное предложение имена для ваших колонок.
Одно из правил, которое я использую, заключается в том, что если определенное имя столбца отображается в другом цвете, чем остальные в среде intellisense, его либо нужно изменить, либо правильно экранировать.
Обратите внимание, что даже в Редакторе CP, который не имеет всех определений SQL в нем, что "дата" имеет другой цвет. В моем локальном редакторе "значение" также меняет цвет
CREATE TABLE mytable(
ID INT NOT NULL
,Bussiness VARCHAR(3) NOT NULL
,Date VARCHAR(10) NOT NULL
,Value INT NOT NULL
);
Моя обычная процедура состояла бы в том, чтобы изменить имена оскорбительных столбцов; так что это то, что я сделал в этом тесте вашего кода, и все это сработало, и я получил желаемые результаты
DECLARE @mytable TABLE (
ID INT NOT NULL
,Bussiness VARCHAR(3) NOT NULL
,mDate VARCHAR(10) NOT NULL
,mValue INT NOT NULL
);
INSERT @mytable( ID,Bussiness, mDate, mValue) VALUES
(1,'GPS','Nov-18',3 )
,(2,'GPS','Dec-18',2 )
,(3,'GPS','Nov-18',2 )
,(4,'GPS','Dec-18',3 );
;with cte as(
select row_number()over(partition by mDate order by ID) ID,
Bussiness, mDate, mValue
from @mytable
)
SELECT *
FROM cte
PIVOT (
MAX([mValue])
FOR mDate IN ( [Nov-18],[Dec-18])
) AS pvt
Если вы не можете изменить имена, то вам нужно обернуть оскорбительные столбцы в [квадратные скобки], и запуск этого кода также дает желаемые результаты
DECLARE @mytable TABLE (
ID INT NOT NULL
,Bussiness VARCHAR(3) NOT NULL
,[Date] VARCHAR(10) NOT NULL
,[Value] INT NOT NULL
);
INSERT @mytable( ID,Bussiness, [Date], [Value]) VALUES
(1,'GPS','Nov-18',3 )
,(2,'GPS','Dec-18',2 )
,(3,'GPS','Nov-18',2 )
,(4,'GPS','Dec-18',3 );
;with cte as(
select row_number()over(partition by [Date] order by ID) ID,
Bussiness, [Date], [Value]
from @mytable
)
SELECT *
FROM cte
PIVOT (
MAX([Value])
FOR [Date] IN ( [Nov-18],[Dec-18])
) AS pvt
И хотя в данном случае это не вызывает проблем; вы всегда должны использовать правильные типы данных; хранение дат в виде текста удаляет многие функции типа даты, такие как сортировка и арифметические операции.