我有以下TSQL,我一直在努力,用以下方法做两件事:
我需要做什么更改才能将结果捕获到具有动态列的临时表中,并消除空值? 感谢。
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;
答案 0 :(得分:0)
完成。
对于第一个挑战,它在此论坛上之前的一个帖子中使用@NullToZeroCols示例后起作用。对于我的第二个挑战,我最终选择了一个非临时表,我可以在每次执行TSQL命令时搜索并删除它。我了解到先前创建的临时表的范围不允许我在执行PIVOT命令后使用它。