Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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 带SELECT语句的条件和_Sql_Ms Access - Fatal编程技术网

Sql 带SELECT语句的条件和

Sql 带SELECT语句的条件和,sql,ms-access,Sql,Ms Access,我喜欢根据从同一个名为。表的结构如下所示。该表称为数据表 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 Val

我喜欢根据从同一个名为。表的结构如下所示。该表称为数据表

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 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

从数据中选择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)

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

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;