使用PIVOT命令创建包含动态列的表

时间:2016-07-29 22:26:47

标签: sql-server pivot dynamic-columns output-parameter

我有以下TSQL,我一直在努力,用以下方法做两件事:

  1. 将Nulls转换为0
  2. 输出到我可以使用的临时表 其他行动。
  3. 部分结果记录在附件中:enter image description here

    我需要做什么更改才能将结果捕获到具有动态列的临时表中,并消除空值? 感谢。

      DECLARE @cols NVARCHAR(MAX), @stmt NVARCHAR(MAX), @ParmDefinition NVARCHAR(MAX), @PVT3 NVARCHAR(MAX);
    
    --Get distinct values of the PIVOT Column
    SELECT @cols = ISNULL(@cols+', ', '')+'['+T.Cat+']'
    FROM
    (
        SELECT TOP 100 CONVERT( VARCHAR(2), IncomeCategoryID) AS Cat
        FROM Payroll.lu_IncomeCategory
        WHERE IsAllowance <> 0
              AND IncomeCategoryID IN
        (
            SELECT DISTINCT
                   IncomeCategoryID
            FROM Payroll.Income
            WHERE IncomeCategoryID <> 0
        )
        ORDER BY IncomeCategoryID
    ) AS T;
    
    SELECT @stmt = N'
        SELECT *
        FROM (SELECT EmployeeID,IncomeCategoryID, 
        SUM(RateAmount) [Amount]
    FROM Payroll.Income
    GROUP BY EmployeeID,  IncomeCategoryID ) as PayData
            pivot 
            (
                SUM([Amount])
                FOR IncomeCategoryID IN ('+@cols+')
            ) as IncomePivot';
    EXEC sp_executesql
         @stmt = @stmt;
    

1 个答案:

答案 0 :(得分:0)

完成。
对于第一个挑战,它在此论坛上之前的一个帖子中使用@NullToZeroCols示例后起作用。对于我的第二个挑战,我最终选择了一个非临时表,我可以在每次执行TSQL命令时搜索并删除它。我了解到先前创建的临时表的范围不允许我在执行PIVOT命令后使用它。