对列执行Sum()会根据group by将该列中的值相加。但是,假设我只想在所有值都不为空或不为0的情况下对这些值求和,那么我需要一个子句来检查任何值是否为0,然后才能求和。我该如何实施这样的条款?
我正在使用sql server 2005。
谢谢,
百里
答案 0 :(得分:2)
让我们的表架构为:
myTable( id, colA, value)
然后,一种方法是:
Select colA, sum(value)
from myTable
group by colA
having count( id ) = count( nullif( value, 0 ))
请注意,nullif是MSSQL服务器功能。你应该为你的rdbms品牌调整代码。
<强>解释强>
count聚合函数只计算非空值。 Here a counting null values test.
答案 1 :(得分:1)
对于这种情况,你说0 + 2 + 3 = 0。假设NULL + 2 + 3也应该为零:
SELECT GroupField,
SUM(Value) * MIN(CASE WHEN COALESCE(Value, 0) = 0 THEN 0 ELSE 1 END)
FROM SumNonZero
GROUP BY GroupField
以上陈述给出了这个结果
GroupField (No column name)
case1 5
case2 0
case3 0
使用此测试数据
CREATE TABLE SumNonZero (
GroupField CHAR(5) NOT NULL,
Value INT
)
INSERT INTO SumNonZero(GroupField, Value)
SELECT 'case1', 2
UNION ALL SELECT 'case1', 3
UNION ALL SELECT 'case2', 0
UNION ALL SELECT 'case2', 2
UNION ALL SELECT 'case2', 3
UNION ALL SELECT 'case3', NULL
UNION ALL SELECT 'case3', 3
UNION ALL SELECT 'case3', 4
答案 2 :(得分:0)
从SUM中消除0是没有意义的,因为它不会影响总和。 但是您可能希望基于另一个字段进行SUM:
select FIELD, sum(
case when(OTHER_FIELD>0) then FIELD
else 0
end)
from TABLE
group by TABLE