[英]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.