Я пытаюсь сделать динамический запрос, используя дату, я не знаю, что не так
Фактические данные поля времени из таблицы SALES
Department Time ExtendedPrice
-------------------------------------
Toys 2018-11-01 1205.11
Toys 2018-12-02 1230.27
Baby Care 2018-12-01 6797.95
Sports 2019-01-01 365.8
Sports 2019-01-01 2993.44
Sports 2018-12-02 580.03
Baby Care 2019-01-02 1117.92
Baby Care 2019-01-02 390.75
soap 2018-11-01 3275.25
Baby Care 2018-12-01 367.56
указанная выше дата является примером формата фактических данных
DECLARE @cols AS Varchar(MAX)
select @cols = STUFF((SELECT ',' + convert(varchar(MAX),Time,105)+''
FROM #Sales
GROUP by Time
ORDER by Time
FOR XML PATH(''), TYPE
).value('.', 'VARCHAR(MAX)')
,1,1,'')
Выход
select @cols
//output
01-11-2018,02-11-2018,01-12-2018,02-12-2018,01-01-2019,02-01-2019
@ запрос
DECLARE @query AS Varchar(MAX)
SET @query = 'SELECT
' + @cols + '
FROM
(
SELECT
convert(varchar(MAX),Time,105) Time,
ExtendedPrice
FROM
#Sales
) x
pivot
(
sum(ExtendedPrice)
for Time in (' + @cols + ')
) p '
PRINT @query
показывает ошибку после ошибки
Ошибка преобразования при преобразовании даты и / или времени из символьной строки.
UPDATE
Я пробовал также это
DECLARE @cols AS Varchar(MAX)
SELECT @cols = STUFF((SELECT ',[' + convert(varchar(MAX),Time,105)+']'
FROM #Sales
GROUP by Time
ORDER by Time
FOR XML PATH(''), TYPE
).value('.', 'VARCHAR(MAX)')
,1,1,'')
select @cols
//output
[01-11-2018],[02-11-2018],[01-12-2018],[02-12-2018],[01-01-2019],[02-01-2019]