я борюсь с ошибкой, делая Динамичная сводной таблицыSQL Dynamic сводную таблицу
Данные источника
JobID | SalesForMonth | YearMonth
7734 | 400 | 2016-12
7734 | 350 | 2017-01
8540 | 444 | 2016-12
8540 | 300 | 2017-01
и стремится к
JobID | 2016-12 | 2017-01
7734 | 400 | 350
8540 | 444 | 300
и я попытался для использования запроса, который я нашел здесь, для создания заголовков столбцов. Но должен признать, что я не очень понимаю «Для XML» строку и получаю ошибку синтаксиса там в строке 6
DECLARE
@cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(YearMonth)
FROM v_JobSalesByMonth
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') ,1,1,'')
SELECT @query =
'SELECT * FROM
(SELECT JobID, YearMonth, SalesForMonth
FROM v_JobSalesByMonth) X
PIVOT
(
(JobID, SalesForMonth)
for [YearMonth] in (' + @cols + ')
) P'
Я также хотел бы придерживаться в «общий объем продаж» в столбце JobId
Любая помощь будет высоко ценится
У вас есть ошибка в вашем стержне. Вам нужно изменить '(JobID, SalesForMonth)' на 'sum (SalesForMonth)'. Вот демон (http://data.stackexchange.com/stackoverflow/query/618823). Затем, если вы хотите получить общий результат JobId, вы можете использовать 'sum (SalesForMonth) over ...()' - вот еще одна демонстрация - http://data.stackexchange.com/stackoverflow/query/618826 – Taryn
SQL Server 2016 добавил 'STRING_AGG' функция –