SQL 服务器:忽略按情况排序

SQL Server : ORDER BY CASE ignored

我有一个 SQL 声明 ORDER BY CASE 是这样的:

SELECT *
FROM PRODUCTS
ORDER BY
    CASE 
        WHEN StockQuantity > 0 THEN 1
        WHEN OutOfStockOrder = 1 THEN 1
        ELSE 0
    END, _Ranking DESC, Name, ProductId

记录按 CASE 正确排序;第一个记录为 1(StockQuantity > 0 OR OutOfStockOrder = 1),然后记录为 0。此外,CASE 1 (StockQuantity > 0 OR OutOfStockOrder = 1) 的记录然后使用 _Ranking 正确排序,然后是名称,最后是 ProductId。但是,当 CASE 为 0 时,_Ranking 不按顺序使用;记录仅按 Name 排序,然后按 ProductId 排序。

像这样:

ProductId | Name     | StockQuantity | OutOfStockOrder | _Ranking
----------+----------+---------------+-----------------+-----------
15        | Camera   |  10           | 0               | 50
25        | Mouse    |  5            | 1               | 25
10        | Keyboard |  1            | 0               | 5
50        | Ball     |  0            | 0               | 0
60        | IPad     |  0            | 0               | 35

有什么我遗漏的吗?

我正在使用 SQL Server 2017。

修复您的 CASE 表达式,以便首先返回具有 StockQuantity > 0 OR OutOfStockOrder = 1 的行。
查询的其余部分是正确的:

SELECT *
FROM PRODUCTS
ORDER BY CASE 
           WHEN StockQuantity > 0 OR OutOfStockOrder = 1 THEN 0
           ELSE 1
         END, 
         _Ranking DESC,
         Name, 
         ProductId

参见demo
结果:

ProductId Name StockQuantity OutOfStockOrder _Ranking
15 Camera 10 0 50
25 Mouse 5 1 25
10 Keyboard 1 0 5
60 IPad 0 0 35
50 Ball 0 0 0