1

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

  1. 将 Null 转换为 0
  2. 输出到我可以用于其他操作的临时表。

部分结果在附件中捕获:在此处输入图像描述

我需要进行哪些更改才能将结果捕获到具有动态列的临时表中并消除空值?谢谢。

  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;
4

1 回答 1

0

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

于 2016-07-30T14:23:51.733 回答