我已经通过并以百万种不同的方式看到了这个问题,但没有一个答案似乎符合我的特殊需求,所以我希望有人可以提供帮助。
我有一张如下表:
URN | CustomerID | Selection
----------
1 | 1 | 16A
----------
2 | 1 | 16B
----------
3 | 1 | 16C
----------
4 | 2 | 16A
----------
5 | 2 | 16C
----------
6 | 1 | 16D
----------
6 | 1 | 16E
----------
我想要的是一个如下所示的导出表或查询(限于5列供选择):
CustomerID | Selection 1 | Selection 2 | Selection 3 | Selection 4 | Selection 5
----------
1 | 16A | 16B | 16C | 16D | 16E
----------
2 | 16A | 16C
----------
答案 0 :(得分:0)
您可以使用带有透视方法的ANSI标准row_number()
来执行此操作。我更喜欢条件聚合:
select CustomerID,
max(case when seqnum = 1 then selection end) as selection_1,
max(case when seqnum = 2 then selection end) as selection_2,
max(case when seqnum = 3 then selection end) as selection_3,
max(case when seqnum = 4 then selection end) as selection_4,
max(case when seqnum = 5 then selection end) as selection_5
from (select t.*,
row_number() over (partition by CustomerID order by urn) as seqnum
from t
) t
group by CustomerID;
答案 1 :(得分:0)
如果您需要动态并假设SQL Server
Declare @SQL varchar(max) = Stuff((Select Distinct ',' + QuoteName(concat('Selection ',Row_Number() over (Partition By CustomerID Order By URN) )) From YourTable For XML Path('')),1,1,'')
Select @SQL = '
Select [CustomerID],' + @SQL + '
From (Select CustomerID,Selection,Col=concat(''Selection '',Row_Number() over (Partition By CustomerID Order By URN) ) From YourTable) A
Pivot (Max([Selection]) For [Col] in (' + @SQL + ') ) p'
Exec(@SQL);
返回
CustomerID Selection 1 Selection 2 Selection 3 Selection 4 Selection 5
1 16A 16B 16C 16D 16E
2 16A 16C NULL NULL NULL