我需要将表格从(A)转换为(B)
我可以通过多次加入同一个表并使用Max运算符来分配字段来实现它,但有没有更好的方法来实现这一点,因为Max运算符可能会导致巨大的表格出现性能问题。
这可以通过使用枢轴来完成,并且会在巨大的桌面上引起任何性能问题吗?
顺便说一句,下面的示例中的ID只是其中一个字段,例如,还有其他字段需要实现相同的功能。
(A)
班级号
1 11
1 12
1 13
2 11
2 12
2 13
(B)
ID2类ID3 ID4
1 11 12 13
2 11
12 13
答案 0 :(得分:1)
你可以PIVOT
:
SELECT *
FROM
(SELECT * FROM MY_TABLE
) pivot ( MAX(id) FOR id IN ([11],[12],[13]) );
答案 1 :(得分:1)
假设你需要去DYNAMIC
Declare @SQL varchar(max) = Stuff((Select Distinct ',' + QuoteName(concat('ID',1+Row_Number() over (Partition By Class Order By ID))) From YourTable Order by 1 For XML Path('')),1,1,'')
Select @SQL = '
Select [Class],' + @SQL + '
From (
Select [Class]
,ID
,Col = concat(''ID'',1+Row_Number() over (Partition By [Class] Order By [ID]))
From YourTable
) A
Pivot (max(ID) For [Col] in (' + @SQL + ') ) P'
Exec(@SQL);
返回
Class ID2 ID3 ID4
1 11 12 13
2 11 12 13