簡體   English   中英

2列sql中的排序順序

[英]sort order in sql with 2 columns

我有這樣的表:

+----+------+-----------+-------------------+
| ID | Name | sortorder | overridesortorder |
+----+------+-----------+-------------------+
| 1  | kkkk | 4         | null              |
+----+------+-----------+-------------------+
| 2  | yyyy | 3         | null              |
+----+------+-----------+-------------------+
| 3  | zzzz | 2         | 4                 |
+----+------+-----------+-------------------+
| 4  | gggg | 1         | 3                 |
+----+------+-----------+-------------------+

我需要顯示如下所示的順序,用上面兩個排序順序列對表格進行排序:

+----+-------+-----------+-------------------+
| ID | Name  | sortorder | overridesortorder |
+----+-------+-----------+-------------------+
| 1  | kkkk  | **4**     | null              |
+----+-------+-----------+-------------------+
| 3  | zzzz  | 2         | **4**             |
+----+-------+-----------+-------------------+
| 2  | yyyy  | **3**     | null              |
+----+-------+-----------+-------------------+
| 4  | gggg  | 1         | **3**             |
+----+-------+-----------+-------------------+

這是你想要的嗎?

select t.*
from t
order by coalesce(overridessortorder, sortorder) desc;

獲取兩列的最大值並以此排序

SELECT ID, Name, sortorder, overridesortorder,
(SELECT Max(o) 
FROM (VALUES (sortorder), (overridesortorder)) AS value(o)) as order_value
FROM [TABLE] ORDER BY order_value

這就是你正在尋找的是

select * 
from table
order by isnull(overridesortorder, sortorder) desc, overridesortorder
SELECT ID, Name, sortorder, overridesortorder 
FROM t
ORDER BY COALESCE(overridessortorder, sortorder) DESC, sortorder DESC;

這將組合兩列,在它不為空的地方使用覆蓋,然后在它為空的地方排序,然后根據原始排序順序列對結果進行排序以打破聯系。 如果您想根據覆蓋打破平局,您只需切換第二種。

我再添加幾行

在這種情況下,如果 sortorder 和 overridesortorder 為空,我需要按名稱顯示順序

ID  Name    sortorder   OverriderSortOrder  order_value
3   zzzz    2   4   4
1   kkkk    4   NULL    4
2   yyyy    3   NULL    3
4   gggg    1   3   3
5   hhhh    NULL    NULL    NULL
6   bbbb    NULL    NULL    NULL
7   jjjj    NULL    NULL    NULL
8   cccc    NULL    NULL    NULL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM