#sql #sql-server #tsql #pivot
#sql #sql-сервер #tsql #сводная
Вопрос:
Я пытаюсь создать сводную таблицу в SQL с динамическими заголовками. У меня заголовки работают просто отлично, но я не могу понять, как группировать строки.
Примером данных является
CriteriaID KSB_Requirement ModuleID Module_Title
1 Understand something 5 Principles 1
1 Understand something 6 Principles 2
1 Understand something 7 Principles 3
2 Learn something 5 Principles 1
2 Learn something 6 Principles 2
Результат, который я получаю, используя:
DECLARE
@cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
SET @cols = STUFF((SELECT distinct ',' QUOTENAME(Module_Title)
FROM Standards_Coverage_Pivot_Data
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT KSB_Requirement, ' @cols ' from
Standards_Coverage_Pivot_Data
pivot
(
Count(CriteriaID)
for Module_Title in (' @cols ')
) p '
execute(@query);
есть….
KSB_Requirement Principle 1 Principle 2 Principle 3
Understand something 1 0 0
Understand something 0 1 0
Understand something 0 0 1
Learn something 1 0 0
Learn something 0 1 0
Что я действительно хочу отобразить, так это:
KSB_Requirement Principle 1 Principle 2 Principle 3
Understand something 1 1 1
Learn something 1 1 0
Любая помощь была бы высоко оценена.
Ответ №1:
Вы были почти на месте
DECLARE
@cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
SET @cols = STUFF((SELECT distinct ',' QUOTENAME(Module_Title)
FROM Standards_Coverage_Pivot_Data
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT * from (Select KSB_Requirement,Module_Title,CriteriaID From Standards_Coverage_Pivot_Data) s
pivot
(
Count(CriteriaID)
for Module_Title in (' @cols ')
) p '
execute(@query);
ВОЗВРАТ
KSB_Requirement Principles 1 Principles 2 Principles 3
Learn something 1 1 0
Understand something 1 1 1
Комментарии:
1. @gillers322 Рад помочь.. Но давайте будем честными, вы выполнили основную часть работы, и у вас был хорошо структурированный вопрос… таким образом, преимущество