2014-02-23 36 views
1

我有一张发票项目表。单笔交易可能会导致多笔借项和多笔信用项共享相同的invoice_set_id,我需要将借方项目的金额与信用项目的金额进行比较,并在结果集中添加invoice_set_id(如果总和(借项)>总和(学分)。如果没有信用额度的行,它也应该增加结果。使用mySQL。谢谢你的帮助。实施例表和结果如下:mySQL select基于行的总和相比于另一个字段的值

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。

我感谢任何帮助。实际的查询涉及更多,但我认为这个特殊问题是我需要帮助的。

回答

1

为此,您可以简单地使用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; 
+0

美丽。简短而甜美。我测试了示例1,结果正是我之后的结果。谢谢。 – user34682

相关问题