需要在SQL Server中的表上创建Pivot

时间:2017-05-13 07:38:21

标签: sql sql-server

我有一个评估表,其中包含以下列: -

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语句来获得上述输出吗?

提前致谢。

1 个答案:

答案 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