Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server 2008-透视表ISNULL=0不工作_Sql_Sql Server 2008 - Fatal编程技术网

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

SQL 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

我正在连接两个表并在透视表中显示结果。这是我第一次做旋转,所以我对这个还是很陌生的

我下面的查询显示的结果几乎是我想要的,但有一点我想不出来。如果该值为null,则将其转换为0。就像我通常做的那样,isNullvalue为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 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,但得到一个错误:不是可识别的聚合函数。谢谢您的解释。