SQL选择具有特定条件
问题描述:
最上面的专栏中,我有发票表是这样的:SQL选择具有特定条件
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显示针对达尔或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,项目达尔是由0的提前量,请帮忙我在SQL Server中实现这一点。
在此先感谢。
答
;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
+0
谢谢,它正在工作。 – Nagesh 2011-04-11 07:18:20
答
直觉是你的表没有正常化。
我建议分解成更小的表
可能是这样的:
+- Bills -------+
| |
| BillNo INT |
+---------------+
+- Items ------------+
| |
| Item varchar(20) |
+--------------------+
+- BillItems --------+
| |
| BillNo INT |
| Advance MONEY |
+--------------------+
然后您存储量兑表格中的最颗粒状物体,即“项”。
那么,这个问题是正确的,但结果是你似乎在逻辑上看起来不正确。也许你想在UI部分处理这个问题。 – 2011-04-11 07:07:37
亲爱的@Aseem Gautam,正如你所说的,它应该已经被商业逻辑所关注。但我对此没有任何控制。即使它是疯狂的,但作为数据库开发人员,我必须为此提供解决方案。感谢您的评论。 – Nagesh 2011-04-11 07:10:11