繁体   English   中英

带有SELECT语句的条件SUM

[英]Conditional SUM with SELECT statement

我喜欢根据从相同表调用的条件对表中的值求和。 该表的结构如下。 该表称为数据

Data
Type    Value
1   5
1   10
1   15
1   25
1   15
1   20
1   5
2   10
3   5

如果类型2的值大于类型3的值,那么我想从表中所有值的总和中减去类型2的值。 我不确定如何使用在表中查找的值编写IF语句。 我在下面尝试过,但是没有用。

SELECT SUM(Value)-IF(SELECT Value FROM Data WHERE Type=2>SELECT Value 
FROM Data WHERE Type=3 THEN SELECT Value FROM Data 
WHERE Type=2 ELSE SELECT Value FROM Data WHERE Type=3) FROM Data

要么

SELECT SUM(d.Value)-IIF(a.type2>b.type3, a.type2, b.type3) 
FROM Data d, (SELECT Value AS type2 FROM Data WHERE Type=2) a, 
(SELECT Value AS type3 FROM Data WHERE Type=3) b

如果我正确地遵循您的逻辑,那么这似乎可以满足您的要求:

select d.value - (case when d2.value > d3.value then d2.value else 0 end)
from data d cross join
     (select value from data where type = 2) d2 cross join
     (select value from data where type = 3) d3 ;

编辑:

如果只需要一个数字,请使用条件聚合:

select sum(value) -
        (case when sum(case when type = 2 then value else 0 end) >
                   sum(case when type = 3 then value else 0 end)
              then sum(case when type = 2 then value else 0 end) 
              else 0
         end)
from data;

感谢您指出正确的方向。 这就是我最后想出的。 由于我使用的是MS Access,因此与上述回复略有不同

SELECT SUM(Value)-IIf(SUM(IIf(Type=2, Value, 0)>SUM(IIf(Type=3, Value, 0), SUM(IIf(Type=2, Value, 0), SUM(IIf(Type=3, Value, 0) FROM Data

它们与上面的第二个建议相同,但适用于MS Access SQL。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM