我有以下数据库表:
LNr OrderNr Ident Amount
1 128 3 123.00
2 128 14 200.00
3 1290 3 300.00
4 13400 3 637.00
我想计算Amount
字段的总和,其中Ident
等于3,但不是14。所以我希望数据库服务器只返回第3和第4行(其中OrderNr
= 1290和13400)。
我试过了:
SELECT SUM(Amount) FROM table WHERE Ident = '3'
但这当然不起作用,因为这也会返回第1行(我不想要因为Ident
等于14)。我尝试了其他一些查询,但无济于事。
答案 0 :(得分:6)
您可以添加其他not exists
条件:
SELECT SUM(Amount)
FROM mytable x
WHERE Ident = 3 AND
NOT EXISTS (SELECT *
FROM mytable y
WHERE x.OrderNr = y.OrderNr AND y.Ident = 14)
答案 1 :(得分:1)
唯一的方法是通过排除第1行或仅包含第3行和第4行来进一步限定WHERE子句。您需要额外的过滤。必须有其他表连接到该表,以允许您根据已定义的业务规则进行优雅过滤。
答案 2 :(得分:1)
或者您可以使用not in
SELECT SUM(Amount)
FROM mytable
WHERE Ident=3 AND OrderNr NOT IN (SELECT OrderNr
FROM mytable
WHERE Ident=14)