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

SQL Server PIVOT dengan beberapa kolom sumbu X

Oke, seperti yang Anda katakan, Anda akan memerlukan SQL dinamis, jadi pertama buka tautan ini . Setelah Anda membacanya, coba yang berikut ini:

KODE YANG DIPERBARUI BERIKUT KOMENTAR:

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. SQL Server mengonversi string ke datetime

  2. Kesalahan overflow aritmatika mengonversi ekspresi ke tipe data datetime. (sambil menampilkan tanggal waktu..)

  3. Mengatasi batas kolom maksimum SQL Server 1024 dan ukuran catatan 8kb

  4. Filter pada klausa Output sql

  5. Menggunakan CASE dalam Pernyataan WHERE ketika parameter memiliki banyak nilai