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

Jak obracać się dynamicznie z datą jako kolumną

Oto twój przykładowy stół

SELECT * INTO #Names
FROM
(
SELECT 1 ID,'ITEM1' NAME 
UNION ALL
SELECT 2 ID,'ITEM2' NAME 
)TAB

SELECT * INTO #Stockdates
FROM
(      
SELECT 1 ID,1 NAMEID,8 STOCK,'2-1-2014 ' [DATE]
UNION ALL
SELECT 2 ID,2 NAMEID,2 STOCK,'4-1-2014 ' [DATE]
)TAB

Umieść dane złączenia w tabeli tymczasowej

SELECT N.NAME,S.[DATE],S.STOCK 
INTO #TABLE
FROM #NAMES N
JOIN #Stockdates S ON N.ID=S.NAMEID

Pobierz kolumny dla osi obrotu

DECLARE @cols NVARCHAR (MAX)

SELECT @cols = COALESCE (@cols + ',[' + CONVERT(NVARCHAR, [DATE], 106) + ']', 
               '[' + CONVERT(NVARCHAR, [DATE], 106) + ']')
               FROM    (SELECT DISTINCT [DATE] FROM #TABLE) PV  
               ORDER BY [DATE]

Teraz go obróć

DECLARE @query NVARCHAR(MAX)
SET @query = '           
              SELECT * FROM 
             (
                 SELECT * FROM #TABLE
             ) x
             PIVOT 
             (
                 SUM(STOCK)
                 FOR [DATE] IN (' + @cols + ')
            ) p      

            '     
EXEC SP_EXECUTESQL @query

Twój wynik jest tutaj



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uzyskać wyraźną listę słów używanych we wszystkich rekordach pola przy użyciu MS SQL?

  2. Jak zainstalować Azure Data Studio na komputerze Mac

  3. Jak zwrócić wyniki zapytania jako listę oddzieloną przecinkami w SQL Server — STRING_AGG()

  4. Jak WYBRAĆ Z procedury składowanej

  5. Skąd mam wiedzieć, kiedy zakończono wypełnianie indeksu pełnotekstowego SQL?