Sql server 使用PIVOT命令创建具有动态列的表

Sql server 使用PIVOT命令创建具有动态列的表,sql-server,pivot,dynamic-columns,output-parameter,Sql Server,Pivot,Dynamic Columns,Output Parameter,我有以下TSQL,我一直在尝试做两件事,但运气不好: 将空值转换为0 输出到可用于 其他行动。 部分结果包含在所附的: 为了将结果捕获到带有动态列的临时表中,并消除空值,我需要做哪些更改? 谢谢 完成了。 对于第一个挑战,在本论坛先前的一篇帖子中使用了@NullToZeroCols示例后,它成功了。对于第二个挑战,我最终选择了一个非临时表,每次执行TSQL命令时都可以搜索并删除该表。我了解到,在执行PIVOT命令后,先前创建的临时表的作用域不允许我使用它。完成。 对于第一个挑战,在本论坛先前的一

我有以下TSQL,我一直在尝试做两件事,但运气不好:

将空值转换为0 输出到可用于 其他行动。 部分结果包含在所附的:

为了将结果捕获到带有动态列的临时表中,并消除空值,我需要做哪些更改? 谢谢

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

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

  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;