1

Bitte beachten Sie das folgende Beispiel:Anzeige mehrerer Zeilen in einer Zeile in SQL Server

enter image description here

Ich möchte alle diese Zeilen in einer einzigen Zeile fusionieren, beachten Sie, dass die Anzahl der Zeilen ist dynamisch!

sollte die Ausgabe wie folgt sein:

enter image description here

Sie

+0

Wenn Sie verschiedene klare Aussagen von Ihnen hinterfragen gegoogelt, was haben Sie gefunden? PS Dies ist eine FAQ, Forschung "Pivoting". – philipxy

+0

Ich habe das selbe Beispiel nicht online gefunden !! – tollamie

+0

Sie werden mit dynamischen Spaltennummern und in der Regel ist es überhaupt nicht verwendbar. Auch welche Reihenfolge möchtest du zeigen? Ohne Bestellung wird es für die Standard-Speicherung Reihenfolge wie in Heap gehen –

Antwort

1

Beispiel

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 Vielen

enter image description here


Wenn es hilft, sieht das generierte SQL wie folgt aus:

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 
+0

Vielen Dank, Ihr Code hat mir viel geholfen – tollamie

+0

@tollamie Glücklich es geholfen –

Verwandte Themen