我有一个表,其中有许多用于唯一 MemberID 的 InsuranceNo。如果有多个 InsuranceNo,我希望 InsuranceNo 转移到一列,因此最后每个 MemberID 占一行,该 ID 的 InsuranceNo 的所有迭代都作为一列。
MemberID InsuranceNo
--------------------------
123456 dser
124571 jklh
123456 abcd
我希望它看起来像这样:
MemberID InsuranceNo1 InsuranceNo2
-----------------------------------------------------
123456 dser abcd
124571 jklh
谢谢!
最佳答案
还有另一种选择...只需将“YourTable”更改为您的实际表名称。
示例
Declare @SQL varchar(max) = '
Select *
From (
Select MemberID
,Item = concat(''InsuranceNo'',row_number() over (Partition By MemberID Order By (Select NULL)))
,Value = InsuranceNo
From YourTable
) A
Pivot (max([Value]) For [Item] in (' + Stuff((Select ','+QuoteName(concat('InsuranceNo',ColNr))
From (Select Distinct ColNr=row_number() over (Partition By MemberID Order By (Select NULL)) from YourTable ) A
For XML Path('')),1,1,'') + ') ) p'
--Print @SQL
Exec(@SQL);
返回
MemberID InsuranceNo1 InsuranceNo2
123456 dser abcd
124571 jklh NULL
如果它有助于您理解 PIVOT,生成的 SQL 如下所示:
Select *
From (
Select MemberID
,Item = concat('InsuranceNo',row_number() over (Partition By MemberID Order By (Select NULL)))
,Value = InsuranceNo
From YourTable
) A
Pivot (max([Value]) For [Item] in ([InsuranceNo1],[InsuranceNo2]) ) p
关于SQL Server 2016 : Turn multiple lines into columns with the different iterations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49057251/