在具有2列的sql中排序顺序

时间:2018-02-10 03:28:59

标签: sql sql-server sql-server-2008 sql-server-2012 sql-server-2014

我有这样的表:

+----+------+-----------+-------------------+
| 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**             |
+----+-------+-----------+-------------------+

5 个答案:

答案 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