【问题标题】:If Records exist with Similar Unique Key then show there Sum else Show Record value如果存在具有相似唯一键的记录,则显示总和,否则显示记录值
【发布时间】:2013-07-04 06:23:38
【问题描述】:

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

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

我猜查询会是这样的......,但这不是我想要的!

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

【问题讨论】:

  • 为什么不总是显示总和?如果没有两张发票,而只有一张发票,那将是完全相同的事情,但它会让您的事情变得更容易。毕竟,用已结算发票的负金额(复式记账?)抵消未结发票金额背后的想法难道不是您可以始终依靠汇总金额来获得正确的余额吗?

标签: sql sql-server


【解决方案1】:

你不需要区分不同的情况,如果你有一条记录,那么总和就是值。

您不应该对金额和类型代码进行分组,那么具有相同发票编号的两条记录将在不同的组中。

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

【讨论】:

  • 谢谢@Guffa。真的,它看起来很简单。我刚刚失去理智,并认为这可能是通过“案例”声明来完成的,现在我在嘲笑自己。再一次感谢你!干杯! :)
猜你喜欢
  • 2022-12-10
  • 1970-01-01
  • 2017-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多