繁体   English   中英

SQL选择具有特定条件的最顶部的列

[英]SQL to select top most column with specific condition

我有这样的发票表:

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中实现此目的。
提前致谢。

;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

直觉是您的桌子没有被标准化。

我建议将其分解成较小的表

可能类似:

+- Bills -------+
|               |
|  BillNo INT   |
+---------------+

+- Items ------------+
|                    |
|  Item varchar(20)  |
+--------------------+

+- BillItems --------+
|                    |  
|  BillNo INT        |
|  Advance MONEY     |
+--------------------+

然后,针对表中最细化的对象(即“项目”)存储预付款。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM