我喜欢根据从同一个表中获取的条件对表中的值求和。表的结构如下。该表称为Data
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
答案 0 :(得分:0)
如果我正确地遵循你的逻辑,那么这似乎可以做你想要的:
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;
答案 1 :(得分:0)
感谢您指点我正确的方向。这就是我最终提出的。由于我正在使用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。