SQL Server 2008 - 数据透视表ISNULL = 0不工作

时间:2014-02-04 23:02:15

标签: sql sql-server-2008

我正在加入两个表并在数据透视表中显示结果。这是我第一次做这个转轴,所以我对此仍然很陌生。

我在下面的这个查询显示的结果几乎是我想要的,但是我想不通的一件小事。如果值为null,则将其转换为0.就像我通常做的那样是null(value,0)。

SELECT * FROM 
( 
SELECT oa.OpptID, o.OpptName, ISNULL(Amount, 0) AS Amount, BucketNameID
FROM dbo.Opportunity o 
LEFT JOIN dbo.ProductBucketAmount oa ON oa.OpptID = o.OpptID
WHERE oa.OpptID IN (123, 456) 
) p
PIVOT
(
    Sum(p.Amount)
    FOR p.BucketNameID
    IN (
        [1], [2], [3], [4], [5]
    )   
) AS pvt

如果我对PIVOT列这样做,它会起作用,但看起来很乱码。另外,我想每次都选择所有列(SELECT * FROM ...)

SELECT OpptName, OpptName, ISNULL([1], 0) AS '1', ISNULL([2], 0) AS '2'  ... etc ...

请帮助或建议

谢谢,

1 个答案:

答案 0 :(得分:3)

是的,你必须在枢轴之外做,所以是的,它有点凌乱。原因是这些NULL中的一些是由从没有输入行的构造的 - 所以没有可以将NULL转换为{的早期阶段{1}}秒。

而且,正如您所发现的那样,0子句本身并不灵活。它必须具有指定的聚合函数,而不是包含聚合的任意表达式。

所以你有:

PIVOT

是你能做的最好的事情。 (并且没有办法以某种形式SELECT OpptName, OpptName, ISNULL([1], 0) AS '1', ISNULL([2], 0) AS '2' ... etc 执行此操作 - 您必须单独转换每个列)