sql - 找出两组记录之间的差异

标签 sql

我在 sql server 上有一组数据,例如:

ID ID_Invoice Article Quantity Status
1  10         carrot  10       null
2  10         carrot  5        C
3  10         onion   8        null
4  10         onion   4        C
5  11         tomato  20       null
6  11         tomato  18       C
7  11         onion   2        null
8  11         onion   1        C

这意味着客户订购了 10 个胡萝卜和 8 个洋葱(在一张发票上),但实际上只收到了 5 个胡萝卜和 4 个洋葱。如果状态为空则为原始数量,如果状态为C则为更正数量

我需要生成一个表
ID ID_Invoice Article Quantity 
1  10         carrot  -5       
2  10         onion   -4
3  11         tomato  -2
4  11         onion   -1

它显示了每张发票上订购数量和实际数量之间的差异。我不知道如何开始。任何帮助深表感谢:)

最佳答案

带有简单 CASE 表达式的选项,没有过多的 JOIN

SELECT ID_Invoice, Article, 
       SUM(CASE WHEN Status IS NULL 
  THEN -1 * Quantity ELSE Quantity END) AS Quantity
FROM dbo.test38
GROUP BY ID_Invoice, Article

结果:
ID_Invoice Article Quantity 
10  carrot  -5
10  onion   -4
11  onion   -1
11  tomato  -2

SQLFiddle 上的演示

关于sql - 找出两组记录之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15430451/

相关文章:

mysql - 我如何实现一个查询,该查询返回包含 2 个特定记录中包含的信息的单个记录?

mysql - MySQL 中何时使用单引号、双引号和反引号

mysql - 如何使用 Node Sequelize 正确定义与现有联合表的一对多关系

sql - PostgreSQL:选择给定类型的表列

MySQL - 组中的条件选择

sql - 如何将 `SELECT ... INTO` 与 UNION 一起使用?

Mysql查询优化(避免使用UNION ALL)

sql - 如何删除表中的重复行

mysql - 如何连接到结果有时可能以 - 符号开头的表?

sql - PSQL:将设置日期变量传递到日期时间时出现语法错误