sql >> Database teknologi >  >> RDS >> Sqlserver

Pivotering af data to gange med dynamisk sql og brugerdefinerede kolonnenavne

Det er ikke nødvendigt at dreje to gange.

Eksempel

Declare @SQL varchar(max) = '
Select *
 From (
        Select A.Account
              ,B.*
         From  (Select Account
                      ,ProductID
                      ,Qty = sum(Qty)
                      ,RN=Row_Number() over (Partition By Account Order by ProductID)
                 From  YourTable
                 Group By Account,Productid
               ) A
         Cross Apply (values (''qty''+cast(RN as varchar(25)),cast(Qty as varchar(100)))
                            ,(''product''+cast(RN as varchar(25)),cast(productid as varchar(100)))
                     ) B (Item,Value)

      ) A
 Pivot (max([Value]) For [Item] in (' + Stuff((Select Distinct ','+QuoteName('product'+ColNr) 
                                                              +','+QuoteName('qty'+ColNr) 
                                               From (Select Distinct ColNr=cast(Row_Number() over (Partition By Account,ProductID Order by (Select NULL)) as varchar(25)) From  YourTable ) A  
                                               Order By 1 
                                               For XML Path('')),1,1,'')  + ') ) p'
Exec(@SQL);
Print @SQL

Returnering

Hvis det hjælper med visusaliseringen - underforespørgslen producerer




  1. MySQL Deltag i flere rækker som kolonner

  2. Hvordan kan denne SQL være forkert? Hvad ser jeg ikke?

  3. MySQL INSERT-sætning i to tabeller ved hjælp af AI-værdi fra den ene i den anden

  4. SQL dynamisk omdrejningspunkt for mål