在 SQL 服务器中将多行显示为一行

Display multiple rows into one row in SQL Server

请看下面的例子:

我想将所有这些行合并为一行,注意行数是动态的!

输出应该是这样的:

谢谢

例子

Declare @SQL varchar(max) = ''
Set @SQL = Stuff((Select Distinct ','  +QuoteName('C'+cast(RN as varchar(25))) 
                                   +','+QuoteName('P'+cast(RN as varchar(25)))
                   From (Select Distinct RN=Row_Number() over (Order By Pays) From YourTable) A  
                   Order by 1 For XML Path('')),1,1,'') 

Set @SQL = '
Select ' + replace(replace(@SQL,'[P','Pays=[P'),'[C','Count=[C') + '
From (
        Select B.*
         From  (
                Select *,RN = Row_Number() over (Order By Pays)
                 From  YourTable
               ) A
         Cross Apply (values (''P''+cast(A.RN as varchar(25)),A.Pays)
                            ,(''C''+cast(A.RN as varchar(25)),cast(A.Count as varchar(50)))
                     ) B (Item,Value)
     ) A
 Pivot (max(value) For [Item] in (' + @SQL + ') ) p'
Exec(@SQL);

Returns


如果有帮助,生成的 SQL 如下所示:

Select Count=[C1],Pays=[P1],Count=[C2],Pays=[P2],Count=[C3],Pays=[P3],Count=[C4],Pays=[P4]
From (
        Select B.*
         From  (
                Select *,RN = Row_Number() over (Order By Pays)
                 From  YourTable
               ) A
         Cross Apply (values ('P'+cast(A.RN as varchar(25)),A.Pays)
                            ,('C'+cast(A.RN as varchar(25)),cast(A.Count as varchar(50)))
                     ) B (Item,Value)
     ) A
 Pivot (max(value) For [Item] in ([C1],[P1],[C2],[P2],[C3],[P3],[C4],[P4]) ) p