Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Dwukrotne przestawianie danych z dynamicznym sql i niestandardowymi nazwami kolumn

Nie ma potrzeby dwukrotnego obracania.

Przykład

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

Zwroty

Jeśli to pomaga w wizualizacji — podzapytanie generuje




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dynamicznie tworzony SQL a parametry w SQL Server

  2. Przewodnik:konfigurowanie wysokiej dostępności programu SQL Server

  3. Wyzwalacz aktualizacji SQL tylko wtedy, gdy kolumna jest modyfikowana

  4. SQL Server 2005 i tymczasowy zakres tabel

  5. Jak podstawić ciąg, jeśli rekord ma wartość NULL w T-SQL?