Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL Server PIVOT với nhiều cột trục X

Được rồi, như bạn đã nói, bạn sẽ cần SQL động, vì vậy trước tiên hãy truy cập liên kết này . Sau khi bạn đọc điều đó, hãy thử những cách sau:

MÃ CẬP NHẬT SAU BÌNH LUẬN:

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. Mô phỏng / Mô phỏng SQL Azure cục bộ?

  2. SQL:Cập nhật một hàng và trả về giá trị cột bằng 1 truy vấn

  3. Sử dụng FILE_IDEX () để trả lại ID của tệp cơ sở dữ liệu trong SQL Server

  4. BCP không trả về lỗi, nhưng cũng không sao chép bất kỳ hàng nào

  5. Quyền EXECUTE bị từ chối - 'aspnet_Roles_RoleExists'