【问题标题】:SQL Server Allocation of amount in billSQL Server 分配账单金额
【发布时间】:2013-09-22 12:10:56
【问题描述】:

我有以下表格

LINEID   BILL   Total Amount     Allocated Amount
1         1         100             
2         1         200
3         2         250

PAYID    BILL    Paid Amount
1         1         250
2         2         100

我需要根据账单在第一张桌子上分配已付金额。我知道我可以将游标与 WHILE 循环一起使用并进行分配 - 有没有更好的方法来做到这一点?

结果应该是

LINEID   BILL   Total Amount     Allocated Amount
1         1         100             100
2         1         200         150
3         2         250         100

【问题讨论】:

  • 你希望你的结果是什么?
  • 以下结果在同一个表中`LINEID BILL Total Amount Amount Amount 1 1 100 100 2 1 200 150 3 2 250 100 ` - Shankar.
  • 刚刚编辑添加结果。
  • 如果有人使用两种不同的付款方式或在不同的时间支付账单 1 会发生什么?您将如何记录 AllocatedAmount。您可能在此处遇到设计问题。
  • 没有不同的支付方式(只有一种)。如果总金额!=根据账单支付和分配分配的金额,我必须选择记录。

标签: sql sql-server sql-server-2008 select


【解决方案1】:
WITH  cl AS
(select o.LINEID, o.BILL, o.[Total Amount], 
(select SUM([Total Amount]) from bills t where o.BILL = t.BILL and o.LINEID >= t.LINEID) as 'sum_total_ammount'
from bills o inner join payment p on o.BILL = p.BILL)

select o.LINEID, o.BILL, o.[Total Amount], 
case when p.[Paid Amount] >= sum_total_ammount then o.[Total Amount] 
else (o.[Total Amount] - sum_total_ammount + p.[Paid Amount]) end as 'Allocated Amount'
from cl o inner join payment p on o.BILL = p.BILL
and (o.[Total Amount] - sum_total_ammount + p.[Paid Amount]) > 0

这是SqlFiddle 上的演示。

【讨论】:

  • 谢谢 .. 它有效.. 我修改了代码以适应表的需要,但得到了逻辑。
猜你喜欢
  • 2016-02-06
  • 1970-01-01
  • 2015-02-04
  • 1970-01-01
  • 1970-01-01
  • 2021-11-02
  • 2017-07-17
  • 1970-01-01
  • 2011-04-29
相关资源
最近更新 更多