【发布时间】:2012-02-15 06:32:10
【问题描述】:
我有一个表格,该表格将根据两列数字(称为 X 列和 Y 列)进行排序。在每一行中,两列可以都有数值(在这种情况下 X
示例数据:
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 子句中执行这种排序?
【问题讨论】:
-
你会把
... 25 NULL放在哪里? -
它将在 23/29 和 31/NULL 之间。如果在两行中都填充,则始终优先按 X 列排序。澄清一下:目标是最终将两列中的每一列中的值相对于该列中的其他值进行排序。由于显而易见的原因,这在 X 列上总是可能的,并且通常可以与 Y 列“接近”——考虑 25/27;它必须在 23/29 之后进行,即使这会导致 Y 列中的小错误排序。
标签: sql sorting sql-order-by