Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Завъртане на данни два пъти с динамичен sql и персонализирани имена на колони

Няма нужда да завъртате два пъти.

Пример

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

Връщане

Ако помага с визуализацията - подзаявката произвежда




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. codeigniter и odbc връзки

  2. Избягване на блокиране на SQL с настройка на заявка:Съвети от Брент Озар

  3. 3 начина да получите типа данни на колона в SQL Server (T-SQL)

  4. Каскадно копиране на редове в sql

  5. Дублиране на редове въз основа на стойност на колона във всеки ред