如何在SQL服务器中使用透视功能



>我有这样的表格:

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 之间变化。

您可以在下面尝试 -

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

如果您的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)

演示

最新更新