使用uniqeness在sql server 2012中进行透视

时间:2016-12-05 17:42:50

标签: sql sql-server tsql

如果我有一张如下表所示的表格。

ISerializable

是否可以获得这样的输出。

enter image description here

请提出任何建议。

1 个答案:

答案 0 :(得分:0)

使用一些动态SQL和Dense_Rank()函数

Declare @SQL varchar(max) 
Select  @SQL = Stuff((Select Distinct ',' + QuoteName(concat('Product',Dense_Rank() over (Order By Product))) 
                                    + ',' + QuoteName(concat('Quantity',Dense_Rank() over (Order By Product))) 
                      From   myTable For XML Path('')),1,1,'')   

Select  @SQL = 'Select Orders,' + @SQL + ' 
                From (
                      Select Orders,Item=concat(''Product'',Dense_Rank() over (Order By Product)),Val=cast(Product as varchar(max)) From myTable
                      Union All
                      Select Orders,Item=concat(''Quantity'',Dense_Rank() over (Order By Product)),Val=cast(Quantity as varchar(max)) From myTable
                     ) A
                Pivot (max(Val) For Item in (' + @SQL + ') ) p'

Exec(@SQL);

返回

Orders  Product1    Quantity1   Product2    Quantity2   Product3    Quantity3
100     CUP         1           NULL        NULL        PLATE       2
101     CUP         1           NULL        NULL        NULL        NULL
102     CUP         2           NULL        NULL        NULL        NULL
103     CUP         1           GLASS       1           PLATE       3