首页 > 解决方案 > 动态透视未知行数 - Sql View

问题描述

我正在使用 SQL 从下表中创建数据库视图。

ItemCode                |BcdName           |BcdCode      |
------------------------|------------------|-------------|
03616006.ERA            |EAS               |00060914ER   |
03616006.ERA            |EAN               |8053379025831|
02660402.ERA            |EAS               |00060936ER   |
02660402.ERA            |EAN               |8053379026227|
02660402.ERA            |EANBULK           |00060936ET   |

我需要旋转 BcdName(对于未知数量的列)并获得以下结果:

ItemCode                |EAN               |EAS          |EANBULK      |
------------------------|------------------|-------------|-------------|
03616006.ERA            |8053379025831     |00060914ER   |             |
02660402.ERA            |8053379026227     |00060936ER   |00060936ET   |

在此处找到的解决方案:sql server 2012中的动态数据透视问题不适用于表视图。

标签: sqlsql-serverpivot

解决方案


如果您愿意接受带有“警告/未定义”列的已定义列

例子

Select * 
 From  (Select ItemCode
              ,Item     = case when [BcdName] in ('EAN','EAS','EANBULK','EASBULK') then BcdName else 'Empty' end
              ,Value    = [BcdCode]
          From YourTable
       ) src
 Pivot (max(Value) for Item in ([EAN],[EAS],[EANBULK],[EASBULK],[EMPTY]) ) Pvt

退货

ItemCode        EAN             EAS         EANBULK     EASBULK EMPTY
02660402.ERA    8053379026227   00060936ER  00060936ET  NULL    SomeValue
03616006.ERA    8053379025831   00060914ER  NULL        NULL    NULL

推荐阅读