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
我有一个 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 |