我有一张发票项目表。一次交易可能会导致多个借方项目和多个贷方项目共享同一发票集id,我需要将借方项目的总和与贷方项目的总和进行比较,如果总和(借方)>总和(贷方),则将发票集id添加到结果集。如果没有包含贷方金额的行,则还应将其添加到结果中。使用mySQL。谢谢你的帮助。示例表和结果如下:

invoice_item_id  invoice_set_id  credit_debit  amount
62                a22             debit         15.00
63                a22             debit          8.00
64                a22             credit        23.00
65                b23             debit         44.00
66                c55             debit         15.00
67                c55             debit          2.00
67                c55             credit         8.00

鉴于上述情况,结果集应为:
invoice_set_id
b23
c55

说明:a22因借贷相等而不返回,b23因有借方而无贷方而返回,c55因借方之和大于单贷方而返回。
我很感激你的帮助。实际的查询更复杂,但我认为这个问题就是我需要帮助的全部。

最佳答案

您只需使用group byhaving即可完成此操作:

select invoice_set_id
from t
group by invoice_set_id
having sum(case when credit_debit = 'debit' then amount else 0 end) > sum(case when credit_debit = 'credit' then amount else 0 end) ;

表示having子句的另一种方式是:
having sum(case when credit_debit = 'debit' then amount
                when credit_debit = 'credit' then - amount
                else 0
           end) > 0;

关于mysql - 基于行总和与另一个字段值比较的mySQL选择,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21973738/

10-15 21:32