Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQLServer中按分区进行用例排序?_Sql_Sql Server_Stored Procedures_Ranking_Rank - Fatal编程技术网

如何在SQLServer中按分区进行用例排序?

如何在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

我需要做排名,如果值是负数,那么按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.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表。请提供所有与范围相关的信息。