我有这样的表:
+----+------+-----------+-------------------+
| 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** |
+----+-------+-----------+-------------------+
答案 0 :(得分:1)
这是你想要的吗?
select t.*
from t
order by coalesce(overridessortorder, sortorder) desc;
答案 1 :(得分:0)
获取两列的最大值,然后按
排序SELECT ID, Name, sortorder, overridesortorder,
(SELECT Max(o)
FROM (VALUES (sortorder), (overridesortorder)) AS value(o)) as order_value
FROM [TABLE] ORDER BY order_value
答案 2 :(得分:0)
这就是你正在寻找的
select *
from table
order by isnull(overridesortorder, sortorder) desc, overridesortorder
答案 3 :(得分:0)
SELECT ID, Name, sortorder, overridesortorder
FROM t
ORDER BY COALESCE(overridessortorder, sortorder) DESC, sortorder DESC;
这将组合两列,使用不为null的覆盖,然后对其为null的排序顺序,然后根据原始排序顺序列对结果进行排序以断开关系。如果你想根据覆盖打破关系,你只需要切换第二种。
答案 4 :(得分:0)
我正在添加更多行
在这种情况下,如果sortorder和overridesortorder为null,我需要按名称显示顺序
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