首页 > 解决方案 > 如何仅获取列中负值的总和?

问题描述

我有一张表格,显示交易以及收据号、付款方式和投标金额。我需要从这张表中获取包含两个以上现金 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

任何帮助将不胜感激。谢谢!

标签: sqlsql-servertsql

解决方案


另一种选择是简单地包含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

推荐阅读