SQL: ORDER BY на основе двух столбцов чересстрочных значений - PullRequest
2 голосов
/ 15 февраля 2012

У меня есть таблица, которая должна быть отсортирована по двум столбцам чисел (назовите их столбец X и столбец Y).В каждой строке оба столбца могут иметь как числовые значения (в этом случае X <= Y), так и один из столбцов может быть NULL. </p>

Пример данных:

      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 Ответ

5 голосов
/ 15 февраля 2012

Вы не можете.Порядок не определен

Простой набор

5    10
7    null
null 8

может быть отсортирован

null 8
5    10
7    null

и

5    10
7    null
null 8

в зависимости от того, где выначать сортировку.

Если возможно, я бы изменил критерии сортировки на "X, если доступно, в противном случае Y".Тогда вы могли бы использовать оператор COALSECE, как предложено "mu is too short".(order by coalesce(x, y))

...