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

Dynamiczna tabela przestawna z wieloma kolumnami na serwerze sql

Użyj tego (jeśli masz problem z sortowaniem, zmień wszystkie 3 typy danych INT):

Kod STATYCZNY:

SELECT HEADER, [A_1],[B_2],[C_3],[D_4],[E_5],[F_6]        
FROM    
(SELECT DECK,HEADER, VALUE FROM REPORT   
    UNPIVOT      
    ( 
    VALUE FOR HEADER IN ([JIB_IN],[REV],[REV_INSIGHT],[JIB_OUT],[CREATION])  
    ) UNPIV
) SRC     
PIVOT    
(
    SUM(VALUE) 
    FOR DECK IN ([A_1],[B_2],[C_3],[D_4],[E_5],[F_6]) 
) PIV

Korzystanie z dynamicznego SQL:

DECLARE @COLSUNPIVOT AS NVARCHAR(MAX),
@QUERY  AS NVARCHAR(MAX),
@COLSPIVOT AS  NVARCHAR(MAX)

SELECT @COLSUNPIVOT = STUFF((SELECT ','+QUOTENAME(C.NAME)
FROM SYS.COLUMNS AS C
WHERE C.OBJECT_ID = OBJECT_ID('REPORT') AND C.NAME <> 'DECK'
FOR XML PATH('')), 1, 1, '')

SELECT @COLSPIVOT = STUFF((SELECT  ',' + QUOTENAME(DECK)
FROM REPORT T FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') ,1,1,'')

SET @QUERY 
= 'SELECT HEADER, '[email protected]+'
FROM
(
SELECT DECK,HEADER,VALUE FROM REPORT
UNPIVOT
(
  VALUE FOR HEADER IN ('[email protected]+')
) UNPIV
) SRC
PIVOT
(
SUM(VALUE)
FOR DECK IN ('[email protected]+')
) PIV'

EXEC(@QUERY)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL WHERE.. IN klauzula wiele kolumn

  2. Jak ZMIENIAĆ parametr wartości tabeli?

  3. Przechwytywanie komunikatu o błędzie z SQL Server w VBA w Excelu

  4. Zmodyfikuj ograniczenie CHECK w programie SQL Server za pomocą T-SQL

  5. SET TEXTSIZE Nie działa w programie SQL Server? Sprawdź to.