在SQL Server中,如何通过两种不同的方式进行卖空排名?
我需要做排名,如果值是负数,那么按Asc排序,如果是正数,那么按Desc排序在SQL Server中,如何通过两种不同的方式进行卖空排名?,sql,sql-server,ranking,rank,Sql,Sql Server,Ranking,Rank,我需要做排名,如果值是负数,那么按Asc排序,如果是正数,那么按Desc排序 select Itemcode, isnull(sum(ss.DiscQty * ss.Cost),0) DescCost, RANK()OVER(Partition by Itemcode order by case when isnull(sum(ss.DiscQty * ss.Cost),0) < 0 THEN isnull(sum(ss.DiscrepancyQt
select
Itemcode,
isnull(sum(ss.DiscQty * ss.Cost),0) DescCost,
RANK()OVER(Partition by Itemcode order by
case when isnull(sum(ss.DiscQty * ss.Cost),0) < 0 THEN isnull(sum(ss.DiscrepancyQty * ss.Cost),0) END ASC,
case when isnull(sum(ss.DiscQty * ss.Cost),0) > 0 THEN isnull(sum(ss.DiscQty * ss.Cost),0) END DESC
) RANKS
from
ss
Group by
ItemNo
但我得到的所有排名都是1
当DiscQty<0
当“DiscQty>0时,Desc订单中的DiscQty
您需要多个键,如下所示:
RANK() OVER (ORDER BY (CASE WHEN SUM(ss.DiscQty * ss.Cost) < 0 THEN SUM(ss.DiscQty * ss.Cost) ELSE 0 END) ASC,
SUM(ss.DiscQty * ss.Cost) DESC
) RANKS
RANK()超过(订单依据(当SUM(ss.DiscQty*ss.Cost)小于0时,则SUM(ss.DiscQty*ss.Cost)否则0结束)ASC,
总额(库存数量*库存成本)说明
)等级
您不需要使用
分区
RANK() OVER (ORDER BY (CASE WHEN SUM(ss.DiscQty * ss.Cost) < 0 THEN SUM(ss.DiscQty * ss.Cost) ELSE 0 END) ASC,
SUM(ss.DiscQty * ss.Cost) DESC
) RANKS