2012-02-07 58 views
1

我有以下的情况条件总结列

ID Value 
1 50 
1 60 
2 70 
2 80 
1 0 
2 50 

我需要运行,将返回总和值的查询,通过ID分组。美中不足的是,如果该值是0,那么整个总和应为0

查询结果将

ID Value 
1 0 
2 200 

我试图

select ID, case 
when Value> 0 then sum(Value) * 1 
when Value= 0 then sum(value) * 0 
end 
from table 

,但没有奏效。

回答

4
select ID, 
     sum(value)*sign(min(abs(value))) as [sum(value)] 
from YourTable 
group by ID 

有了,如果你喜欢一个案例:

select ID, 
     case sign(min(abs(value))) 
     when 0 then 0 
     else sum(value) 
     end as [sum(value)] 
from YourTable 
group by ID 
+0

您可以在case语句中使用聚合函数,或者你可以把一个case语句中的聚合函数。您无法检查** un **汇总值并返回汇总值。 – 2012-02-07 12:13:33

+0

清洁和简单。但无法使用CASE – mko 2012-02-07 12:13:54

+0

@John - 使用CASE的版本更新了答案。 – 2012-02-07 12:18:05