Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Memutar Data dua kali dengan sql dinamis dan nama kolom khusus

Tidak perlu Pivot dua kali.

Contoh

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

Pengembalian

Jika membantu dengan Visualisasi - Subkueri menghasilkan




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Masalah Server Tertaut Sql Server Login gagal untuk pengguna 'NT AUTHORITY\ANONYMOUS LOGON'

  2. Casting Notasi Ilmiah (dari varchar -> numerik) dalam tampilan

  3. Gunakan CRYPT_GEN_RANDOM() untuk Membuat Kriptografi, Angka Acak di SQL Server

  4. Cegah Injeksi SQL dalam klausa ORDER BY

  5. Bagian waktu dari Bidang DateTime di SQL