2013-07-06 44 views
0

我有一个发票与不同的发票表。每个发票都有唯一的发票号码和金额值。发票有两种类型。一个是Invoice Type,另一个是Settled Type。如果创建了发票,表格中的条目将是发票类型,金额将为正数。如果用户支付了该发票,则具有相同发票编号的另一个条目将被输入到该表格中,但是由于用户已经支付了该数额,所以具有负值。如果记录存在类似的唯一键,然后显示那里总结其他显示记录值

现在我想要显示记录是否存在任意两张具有相同发票编号的记录,然后通过计算金额总和(即添加发票类型记录金额和结算类型记录) 。那些具有唯一发票号码(没有结算记录)的记录应该按原样显示(没有总和)。

我想查询会出现一些这种..什么的,但是这不正是我想要的!

Select 
    InvoiceNumber, InvoiceTypeCode, 
    Amount = case when COUNT(InvoiceNumber) > 1 
        then SUM(Amount) 
        else Amount 
      end 
from 
    Invoice 
group by 
    InvoiceNumber, Amount, InvoiceTypeCode 
+1

你为什么不* *总是显示的总和?如果没有两个,但只有一个发票,这将等于完全相同的事情,但它使事情变得更容易。毕竟,是不是背后有一个稳定的发票的负面量抵消了开放式发票的金额想法(复式簿记?)正是你总是可以依靠总结的数额,以获得正确的平衡? – stakx

回答

5

您不需要区分不同情况,如果您有单个记录,那么总和与该值相同。

的数量和类型代码,您should't组,那么这两个记录有相同的发票编号将在不同的组。

select 
    InvoiceNumber, Amount = sum(Amount) 
from 
    Invoice 
group by 
    InvoiceNumber 
+0

谢谢@Guffa。真的,它看起来很简单。我刚刚失去了主意,认为这可能是由'Case'声明完成的,现在我正在嘲笑我的自我。再一次感谢你!干杯! :) – sohaiby