sql - 如何仅获取列中负值的总和?
问题描述
我有一张表格,显示交易以及收据号、付款方式和投标金额。我需要从这张表中获取包含两个以上现金 MOP 的收据编号,这些现金 MOP 在汇总后具有负值(并且仍然保持正数不变)。本报告的目的是显示不规则的收据编号,因为这些是卡加载交易。累计现金价值为负意味着他们得到了零钱,这是不应该发生的。例如,这就是我所拥有的:
收据编号 | 拖把 | 数量 |
---|---|---|
0001 | 现金 | -100 |
0001 | 现金 | -70 |
0001 | 卡片 | 500 |
0002 | 现金 | -50 |
0002 | 现金 | -300 |
0002 | 电子钱包 | 250 |
0003 | 现金 | -100 |
0003 | 现金 | 150 |
0003 | 卡片 | 200 |
0004 | 现金 | -100 |
0004 | 现金 | 300 |
0004 | 卡片 | 200 |
结果需要是这样的
收据编号 | 拖把 | 数量 |
---|---|---|
0001 | 现金 | -170 |
0001 | 卡片 | 500 |
0002 | 现金 | -350 |
0002 | 电子钱包 | 250 |
这是我到目前为止的查询。
SELECT DISTINCT a.*
FROM table_1 a
JOIN
(SELECT [Receipt No_]
,[MOP]
,[Amount]
FROM table_1
GROUP BY [Receipt No_]
,[MOP]
,[Amount]
HAVING MIN([Amount]) < 0 ) t
on a.[Receipt No_]=t.[Receipt No_]
ORDER BY [Receipt No_]
GO
任何帮助将不胜感激。谢谢!
解决方案
另一种选择是简单地包含sign([Amount])
在您的 Group By 中
例子
Select [Receipt No.]
,[MOP]
,[Amount] = sum([Amount])
From YourTable
Group By [Receipt No.]
,[MOP]
,sign([Amount])
结果
Receipt No. MOP Amount
0001 Card 500.00
0001 Cash -170.00
0002 Cash -350.00
0002 E-Wallet 250.00
0003 Card 200.00
0003 Cash -100.00
0003 Cash 150.00
0004 Card 200.00
0004 Cash -100.00
0004 Cash 300.00
推荐阅读
- flutter - 如何使 Gridview 更靠近 Column 小部件中的 Card 小部件
- reactjs - React,如何切换一个按钮的背景颜色?
- google-cloud-vision - 通过 API 而非 CMD 获取操作状态
- java - OutOfMemoryError:在 WildFly 中使用 websocket 时直接缓冲内存
- wpf - 如何在子控件级别从集合中删除元素
- java - 使用 Fabric8 java 库列出 pod 文件夹中的所有文件
- java - 如何为同一方法传递不同的对象类型,而不是在java中编写具有相同功能和返回类型的两个方法
- graphql - Hasura GraphQL Engine 和 Postgres 的多个实例如何通过 Docker 在本地运行?
- flutter - Flutter:使用嵌套导航器
- go - 我应该在调用 os.removeAll 之前关闭 os.File 吗?