SQL Server 2008-透视表ISNULL=0不工作
我正在连接两个表并在透视表中显示结果。这是我第一次做旋转,所以我对这个还是很陌生的 我下面的查询显示的结果几乎是我想要的,但有一点我想不出来。如果该值为null,则将其转换为0。就像我通常做的那样,isNullvalue为0SQL Server 2008-透视表ISNULL=0不工作,sql,sql-server-2008,Sql,Sql Server 2008,我正在连接两个表并在透视表中显示结果。这是我第一次做旋转,所以我对这个还是很陌生的 我下面的查询显示的结果几乎是我想要的,但有一点我想不出来。如果该值为null,则将其转换为0。就像我通常做的那样,isNullvalue为0 SELECT * FROM ( SELECT oa.OpptID, o.OpptName, ISNULL(Amount, 0) AS Amount, BucketNameID FROM dbo.Opportunity o LEFT JOIN dbo.ProductBu
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 OpptName, OpptName, ISNULL([1], 0) AS '1', ISNULL([2], 0) AS '2' ... etc ...
请提供帮助或建议
谢谢,是的,你必须在轴的外面做,所以是的,有点乱。原因是其中一些空值是由pivot从无输入行构造的-因此没有可以将空值转换为0的早期阶段 而且,正如您还发现的,PIVOT子句本身并不灵活。它必须精确地指定聚合函数,而不是包含聚合的任意表达式 那么你有什么:
SELECT OpptName, OpptName, ISNULL([1], 0) AS '1', ISNULL([2], 0) AS '2' ... etc
是你能做的最好的了。作为某种形式的选择,没有办法做到这一点您必须分别转换每列是,这是可能的。你可以找到很多这样的例子。我的一个问题也包含一个例子。如果你试图解决你的问题,并且在某个特定的问题上陷入困境,你会得到额外的帮助。我会试试看。谢谢我试图解决问题,但还是卡住了。我更新了我的帖子,我被困在哪里了?请帮忙!谢谢。我在PIVOT语句中尝试了isNullPull.Amount,0,但得到一个错误:不是可识别的聚合函数。谢谢您的解释。