如何在SQL Server中使用数据透视功能?

时间:2019-01-22 12:33:21

标签: sql sql-server pivot

我有一张这样的桌子:

Factory indexcode grade
200         1                95
200         2               100
5000        1                85
5000        3                90

如何获得此结果?

Factory.       1        2       3      
200           95     100        -
5000          85       -        90

indexcode在1到6之间变化。

2 个答案:

答案 0 :(得分:1)

您可以在下面尝试-

select factorycode,pv.*
from tablename
pivot
(max(grade) for indexcode in ([1],[2],[3])) as pv

答案 1 :(得分:1)

在这种情况下,如果您的indexcodes是固定的(1-6),则可以使用以下PIVOT查询。

SELECT * 
FROM   TABLE_NAME
       PIVOT ( Max(grade) 
             FOR indexcode IN ( [1], [2], [3],[4],[5],[6]) ) pvt

如果您的索引代码值不是固定的并且可以取任何值,那么在这种情况下,您可以像下面这样进行动态透视。

DECLARE @cols AS NVARCHAR(max) = Stuff((SELECT DISTINCT ', ' + Quotename(indexcode) 
         FROM TABLE_NAME
         FOR xml path(''), type).value('.', 'NVARCHAR(MAX)'), 1, 1, ''); 

DECLARE @query AS NVARCHAR(max) = ' SELECT *
                                    FROM  TABLE_NAME
                                           PIVOT ( max(grade) 
                                                 FOR indexcode IN ('+@cols+') ) pvt';
EXECUTE(@query)

DEMO