我正在加入两个表并在数据透视表中显示结果。这是我第一次做这个转轴,所以我对此仍然很陌生。
我在下面的这个查询显示的结果几乎是我想要的,但是我想不通的一件小事。如果值为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 ...
请帮助或建议
谢谢,
答案 0 :(得分:3)
是的,你必须在枢轴之外做,所以是的,它有点凌乱。原因是这些NULL
中的一些是由从没有输入行的构造的 - 所以没有可以将NULL
转换为{的早期阶段{1}}秒。
而且,正如您所发现的那样,0
子句本身并不灵活。它必须具有指定的聚合函数,而不是包含聚合的任意表达式。
所以你有:
PIVOT
是你能做的最好的事情。 (并且没有办法以某种形式SELECT OpptName, OpptName, ISNULL([1], 0) AS '1', ISNULL([2], 0) AS '2' ... etc
执行此操作 - 您必须单独转换每个列)