首页 > 解决方案 > SQL Server 常规透视

问题描述

我有一个名为Comments的 SQL 表,有 2 列:NCC_CLTID 和 NCC_CTYPE

该表有以下信息

NCC_CLTID   NCC_CTYPE
TEST1         A 
TEST1         A 
TEST1         C
TEST1         E
TEST1         E
TEST1         E 
TEST1         E
TEST2         A
TEST2         B
TEST2         B
TEST2         C

我想要一个如下所示的数据透视表:

NCC_CLTID TYPE1 TYPE2 TYPE3 TYPE4 TYPE5 TYPE6 TYPE7 TYPE8 ... TYPE20
TEST1       A    A      C     E    E      E     E    NULL      NULL
TEST2       A    B      B     C    NULL   NULL  NULL  NULL      NULL

我怎样才能做到这一点?由于某种原因,我看不出有什么方法可以使这项工作

标签: sql-serversql-server-2012pivot

解决方案


假设您知道或最大数量的TYPEs,您可以使用 row_number() 来确定列

例子

Select *
 From (
        Select [NCC_CLTID]
              ,[NCC_CTYPE]
              ,Item = concat('Type',row_number() over (partition by [NCC_CLTID] order by [NCC_CTYPE]) )
        from YourTable
      ) src
 Pivot (max([NCC_CTYPE]) for Item in ([Type1],[Type2],[Type3],[Type4],[Type5],
                                      [Type6],[Type7],[Type8],[Type9],[Type10],
                                      [Type11],[Type12],[Type13],[Type14],[Type15],
                                      [Type16],[Type17],[Type18],[Type19],[Type20]
                                     ) ) pvt 

结果

在此处输入图像描述


推荐阅读