我有一个评估表,其中包含以下列: -
AssessmentID | QuestionID | Answer
------------------------------------
1 1 Test
1 1.1 Test1
1 1.2 Test2
1 1.3 Test
1 1.4 Test1
1 2 Test2
现在我想使用pivot显示Sql Query输出,如下所示
Assessment-Id 1 1.1 1.2 1.3 1.4 2 2.5 2.6 2.7
------------------------------------------------------------------------------
1 Test TEST1 TEST2 TES3 NULL TEST4 NULL NULL NULL
有人可以请我提供SQL pivot语句来获得上述输出吗?
提前致谢。
答案 0 :(得分:1)
您可以使用动态查询来实现此目的。
Create TABLE #Table1
([AssessmentID] nvarchar(50), [QuestionID] nvarchar(50), [Answer] nvarchar(50));
INSERT INTO #Table1
([AssessmentID], [QuestionID], [Answer])
VALUES
('1', '1.1', 'Test1'),
('1', '1.2', 'Test2'),
('1', '1.3', 'Test'),
('1', '1.4', 'Test1'),
('1', '2', 'Test2'),
('1', '2.3',null)
;
DECLARE
@cols AS NVARCHAR(MAX)='',
@sql AS NVARCHAR(MAX)='';
SET @cols = STUFF(
(SELECT N',' + QUOTENAME([QuestionID]) AS [text()]
FROM #Table1 AS Y
FOR XML PATH('')),
1, 1, N'');
print @cols
SET @sql = N'SELECT *
FROM #Table1
PIVOT(MAX([Answer]) FOR QuestionID IN(' + @cols + N')) AS P;';
EXEC sp_executesql @sql;
print @sql;
GO
drop table #table1