Порядок перестановки SQL - PullRequest
       4

Порядок перестановки SQL

1 голос
/ 06 декабря 2011

Проблема: Строка в my_table содержит

1
2
3
3
4
4
4

Я хочу изменить порядок строк на следующий

4
4
4    
1
3
3
2

Есть ли способ, которым я могу это сделать?

Я еще не написал ни одного кода. (Не знаю с чего начать)

Ответы [ 4 ]

2 голосов
/ 06 декабря 2011

как сказал Адам Венгер,

или, если хотите, это может быть сделано в вашей таблице, что означает, что ваша инструкция sql может оставаться в качестве базового выбора * из таблицы по newcolumn *

* см. Ниже

add a new column
update each row set column=1 where original_column=4
update each row set column=2 where original_column=2
update each row set column=3 where original_column=1
update each row set column=4 where original_column=3

и затем упорядочить по этому новому столбцу.

2 голосов
/ 06 декабря 2011

Просто используйте CASE в ORDER BY - это намного чище и легче для чтения.

...
ORDER BY CASE WHEN YourColumn = 4 then 0
              WHEN YourColumn = 2 then 1
              ELSE 2 END, yourcolumn

Также плохая идея изменить порядок строк, так как на самом деле порядок не существуетв SQL - все это на уровне представления, поэтому используйте ORDER BY в ваших SELECT s, чтобы выполнить это.

0 голосов
/ 06 декабря 2011

Создайте таблицу поиска с исходным значением и соответствующим порядком сортировки:

SortLookupTable:
OriginalValue, SortOrder
1,             2
2,             4
3,             3
4,             1

Затем присоедините таблицу к исходной таблице

SELECT T.*
FROM
    MyTable T
    INNER JOIN SortLookupTable S
        ON T.Value = S.OriginalValue
ORDER BY
    S.SortOrder;
0 голосов
/ 06 декабря 2011
SELECT yourColumn
FROM
(
   SELECT yourColumn
      , CASE yourColumn
           WHEN 4 THEN 1
           WHEN 1 THEN 2
           WHEN 3 THEN 3
           WHEN 2 THEN 4
        END AS SortColumn
   FROM yourTable
) AS t
ORDER BY t.SortColumn ASC

Это будет сортировать 4, 1, 3, 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...