Нужна помощь в сортировке двух столбцов в одном операторе выбора - PullRequest
1 голос
/ 31 марта 2019

Я знаю, что могу отсортировать один столбец данных, используя ORDER BY, но я хочу отсортировать два столбца с помощью ORDER BY, чтобы результаты отображались в одном табличном представлении.

Я пытался использовать список через запятую, но это не так, как я хочу. Я хочу отсортировать оба столбца независимо от того, какие строки должны быть в определенных позициях.

SELECT * FROM top_5_films ORDER BY position DESC;

Я хочу, чтобы оба столбца данных были отсортированы, а поля не привязаны к строкам.

1 Ответ

0 голосов
/ 31 марта 2019

Как прокомментировал @forpas, вы, похоже, хотите создать записи несвязанных данных;это довольно странное требование в SQL ...

Предполагая, что ваша СУБД поддерживает оконную функцию ROW_NUMBER(), вы можете действовать следующим образом:

  • для каждого из двух столбцов,создайте подзапрос, который выбирает столбец и назначает номер строки каждой записи, отсортированный по самому столбцу
  • затем JOIN оба подзапроса по их номеру строки
  • наконец, сортировка по номеру строки

Рассмотрим:

SELECT c1.col1, c2.col2
FROM 
    (
        SELECT col1, ROW_NUMBER() OVER(ORDER BY col1) rn FROM top_5_films
    ) c1
    INNER JOIN (
        SELECT col2, ROW_NUMBER() OVER(ORDER BY col2) rn FROM top_5_films
    ) c2  ON c1.rn = c2.rn
ORDER BY c1.rn

Демонстрация на DB Fiddle :

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

| col1 | col2 |
| ---- | ---- |
| ghi  | RST  |
| abc  | UVW  |
| lmn  | OPQ  |

Результаты:

| col1 | col2 |
| ---- | ---- |
| abc  | OPQ  |
| ghi  | RST  |
| lmn  | UVW  |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...