如何在SQLServer中按分区进行用例排序?
我需要做排名,如果值是负数,那么按Asc排序,如果是正数,那么按Desc排序如何在SQLServer中按分区进行用例排序?,sql,sql-server,stored-procedures,ranking,rank,Sql,Sql Server,Stored Procedures,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
选择
项目代码,
isnull(总和(ss.DiscQty*ss.Cost),0)描述成本,
RANK()超过(按项划分代码顺序)
当isnull(总和(ss.DiscQty*ss.Cost),0)<0时,则isnull(总和(ss.DiscQty*ss.Cost),0)结束ASC,
如果isnull(总和(ss.DiscQty*ss.Cost),0)>0,则isnull(总和(ss.DiscQty*ss.Cost),0)结束描述
)等级
从…起
党卫军
分组
项目编号
这就是你想要的模式吗?
简化了代码以突出显示正在发生的事情
;WITH Example (n) AS
(
SELECT 1 UNION ALL
SELECT 2 UNION ALL
SELECT 3 UNION ALL
SELECT -1 UNION ALL
SELECT -2 UNION ALL
SELECT -3
)
SELECT n
,ROW_NUMBER() OVER (ORDER BY ABS(n)-0 DESC)
FROM Example
ORDER BY n,ROW_NUMBER() OVER (ORDER BY ABS(n)-0 DESC)
不能动态更改条件。执行以下操作
SELECT
Brand,
ItemNo,
RANK() OVER (PARTITION BY ItemNo ORDER BY
CASE WHEN ISNULL(Disc, 0) > 0 THEN SUM(Quantity * Item.Cost) ELSE 0 END DESC,
CASE WHEN ISNULL(ST_ItemEntry.Discrepancy, 0) < 0 THEN SUM(Quantity * Item.Cost) ELSE 0 END ASC
) AS [Rank]
FROM
item
GROUP BY
Brand,ItemNo
选择
品牌
项目编号:,
RANK()超过(按项划分)无顺序依据
如果ISNULL(Disc,0)>0,则求和(数量*项目成本)否则为0结束描述,
如果ISNULL(ST_ItemEntry.Disciency,0)<0,则求和(数量*项目.成本),否则0结束ASC
)作为[职级]
从…起
项目
分组
品牌,项目编号
具有预期结果的示例数据将有助于“它不起作用”不是一个好的描述。如果你得到了意想不到的结果,解释一下你期望的结果是什么,以及这些结果如何不匹配。如果您收到一条错误消息(我所期望的),请告诉我们错误消息说什么。查询中缺少ST_ItemEntry表。请提供所有与范围相关的信息。