我有一个基于两列数字排序的表(称为列X和列Y)。在每一行中,两列都可以具有数值(在这种情况下X <= Y),或者其中一列可以为NULL。
示例数据:
X Y
----- -----
... NULL 26
... 31 NULL
... 1 7
... 39 46
... NULL 36
... 15 16
... NULL 14
... 23 29
我想对这些数据进行排序,以便列“正确”交错。具体做法是:
1)如果两个行中都存在X值,则根据X。
进行排序2)否则,如果两个行中都存在Y值,则基于Y进行排序。
3)否则,比较可用的X值和可用的Y值。
示例数据的“正确”排序是:
X Y
----- -----
... 1 7
... NULL 14
... 15 16
... NULL 26
... 23 29
... 31 NULL
... NULL 36
... 39 46
在ORDER BY子句中是否有任何简单的方法来执行此排序?
答案 0 :(得分:5)
你做不到。订单没有明确定义
简单的设置
5 10
7 null
null 8
可以分类
null 8
5 10
7 null
和
5 10
7 null
null 8
取决于您开始排序的位置。
如果可能,我会将排序条件更改为“X
(如果可用),否则Y
”。然后你可以按照“mu太短”的建议使用COALSECE运算符。 (order by coalesce(x, y)
)