我有一张像这样的发票表:
Bill Item Qty Weight Rate Amount Advance
10001 Dal 1 10.00 70.00 700.00 500.00
10001 Jeera 2 0.60 1200.00 720.00 500.00
10002 Bread 1 0.80 50.00 40.00 0.00
10003 Coffee 1 1.00 700.00 700.00 0.00
10004 Tea 1 0.70 900.00 700.00 0.00
请注意,对于10001号法案,总预付款仅为500,但是对于项目Dal和Jeera重复两次。我需要一个SQL来显示针对Dal或Jeera的一个预付金额,其最大金额如下:
Bill Item Qty Weight Rate Amount Advance
10001 Dal 1 10.00 70.00 700.00 0.00
10001 Jeera 2 0.60 1200.00 720.00 500.00
10002 Bread 1 0.80 50.00 40.00 0.00
10003 Coffee 1 1.00 700.00 700.00 0.00
10004 Tea 1 0.70 900.00 700.00 0.00
这里唯一的变化是对于账单号10001,项目Dal预付金额为0.请帮我在SQL Server中实现这一点。
提前谢谢。
答案 0 :(得分:3)
;with cte as
(
select *,
row_number() over(partition by Bill order by Advance desc) as rn
from YourTable
)
select
C.Bill,
C.Item,
C.Qty,
C.Weight,
C.Rate,
C.Amount,
case C.rn when 1 then C.Advance else 0 end as Advance
from cte as C
答案 1 :(得分:0)
直觉是你的桌子没有标准化。
我建议把它分成小桌子
可能类似:
+- Bills -------+
| |
| BillNo INT |
+---------------+
+- Items ------------+
| |
| Item varchar(20) |
+--------------------+
+- BillItems --------+
| |
| BillNo INT |
| Advance MONEY |
+--------------------+
然后根据表格中最细粒度的对象存储高级金额,即“项目”。