Sql 如果存在具有类似唯一键的记录,则显示其中的总和,否则显示记录值

Sql 如果存在具有类似唯一键的记录,则显示其中的总和,否则显示记录值,sql,sql-server,Sql,Sql Server,我有一张不同发票的发票表。每张发票都有唯一的发票编号和金额值。发票有两种类型。一种是发票类型,另一种是结算类型。如果创建了发票,表中的条目将为发票类型,金额将为正数。如果用户支付了该发票,将在表中输入另一个具有相同发票号但金额为负数的条目,因为用户已支付该金额 现在我想显示记录,如果存在任何两条发票编号相同的记录,则显示该记录,并计算金额之和(这意味着添加发票类型记录和结算类型记录的金额)。具有唯一发票编号(无结算记录)的记录应按原样显示(无金额) 我想这个问题应该是这样的,但这并不是我想要的

我有一张不同发票的发票表。每张发票都有唯一的发票编号和金额值。发票有两种类型。一种是发票类型,另一种是结算类型。如果创建了发票,表中的条目将为发票类型,金额将为正数。如果用户支付了该发票,将在表中输入另一个具有相同发票号但金额为负数的条目,因为用户已支付该金额

现在我想显示记录,如果存在任何两条发票编号相同的记录,则显示该记录,并计算金额之和(这意味着添加发票类型记录和结算类型记录的金额)。具有唯一发票编号(无结算记录)的记录应按原样显示(无金额)

我想这个问题应该是这样的,但这并不是我想要的

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

您不需要区分不同的情况,如果您有一条记录,那么总和与值相同

您不应按金额和类型代码分组,那么具有相同发票号的两条记录将位于不同的组中

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

您不需要区分不同的情况,如果您有一条记录,那么总和与值相同

您不应按金额和类型代码分组,那么具有相同发票号的两条记录将位于不同的组中

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

你为什么不总是显示总数?如果没有两张发票,但只有一张发票,这将是完全相同的事情,但它使事情更容易为您。毕竟,用已结算发票的负金额(复式簿记?)取消未结发票金额背后的想法不正是因为您可以始终依靠合计金额来获得正确的余额吗?为什么不始终显示金额?如果没有两张发票,但只有一张发票,这将是完全相同的事情,但它使事情更容易为您。毕竟,用已结算发票的负金额(复式簿记?)取消未结发票金额背后的想法不正是你可以始终依靠合计金额来获得正确的余额吗?谢谢@Guffa。事实上,这就像它看起来一样直截了当。我刚刚失去了理智,以为这可以通过“案例”陈述来完成,现在我在嘲笑自己。再次感谢您!干杯!:)谢谢你,古芙。事实上,这就像它看起来一样直截了当。我刚刚失去了理智,以为这可以通过“案例”陈述来完成,现在我在嘲笑自己。再次感谢您!干杯!:)