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

SQL Server PIVOT z wieloma kolumnami osi X

Ok, jak powiedziałeś, będziesz potrzebować dynamicznego SQL, więc najpierw przejdź do ten link . Po przeczytaniu spróbuj wykonać następujące czynności:

AKTUALIZOWANY KOD PO KOMENTARZU:

DECLARE @cols AS NVARCHAR(MAX), @cols2 AS NVARCHAR(MAX), @query AS NVARCHAR(MAX);

WITH CTE AS
(
    SELECT *, CAST([Year] AS NVARCHAR(4))+RIGHT('00'+CAST([Month] AS NVARCHAR(2)),2) YearMonth
    FROM YourTable
)

SELECT @cols = STUFF((  SELECT DISTINCT ',' + QUOTENAME(YearMonth) 
                        FROM CTE 
                        FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,''),
       @cols2 = STUFF(( SELECT DISTINCT ',ISNULL(' + QUOTENAME(YearMonth) + ',0) AS ' + QUOTENAME(YearMonth)
                        FROM CTE 
                        FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'')


SET @query = '
SELECT Payroll, Forname, Surname, ' + @cols2 + '
FROM (  SELECT  Payroll, Forname, Surname, 
                CAST([Year] AS NVARCHAR(4))+RIGHT(''00''+CAST([Month] AS NVARCHAR(2)),2) YearMonth,
                Amount
        FROM YourTable ) T
PIVOT(SUM(Amount) FOR YearMonth IN ('[email protected]+')) PT'

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. Jak korzystać z szablonów w SQL Server Management Studio (SSMS) — samouczek SQL Server / TSQL część 16

  2. Nieprawidłowe dane wyjściowe w zapytaniu FULL OUTER JOIN

  3. Jak wygenerować nazwę tabeli według daty i godziny?

  4. Jak dodać ograniczenie klucza obcego do istniejącej tabeli w SQL Server — samouczek SQL Server / TSQL część 68

  5. DATEADD() Przykłady w SQL Server