SQL:ORDER BY基于两列隔行扫描值

时间:2012-02-15 06:32:11

标签: sql sorting sql-order-by

我有一个基于两列数字排序的表(称为列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子句中是否有任何简单的方法来执行此排序?

1 个答案:

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