Пользовательский порядок в SQL для столбцов конкретных данных - PullRequest
0 голосов
/ 11 марта 2019

У меня есть таблица, например, как показано ниже:

+-------+------+---------+---------+
| Col1  | col2 | values1 | values2 |
+-------+------+---------+---------+
| item1 | A4   |       5 |      87 |
| item1 | A1   |       5 |      11 |
| item1 | A2   |       5 |      25 |
| item1 | A3   |       5 |      33 |
| item1 | A5   |       0 |      18 |
| item2 | A4   |      12 |      72 |
| item2 | A1   |       6 |      12 |
| item2 | A2   |       6 |      26 |
| item2 | A3   |       6 |      34 |
| item2 | A5   |       6 |      35 |
+-------+------+---------+---------+

Я хотел упорядочить эти данные выше для определенного условия, например, для: упорядочить данные значений2 в по возрастанию , где col2 = A5 , что означает, что данные должны быть упорядочены как обычно, но где col2 = 'A5' строка с порядком значений2 должна быть восходящей или нисходящей должна быть первой Это будет выглядеть как-токак показано ниже.

+-------+------+---------+---------+
| Col1  | col2 | values1 | values2 |
+-------+------+---------+---------+
| item1 | A1   |       5 |      11 |
| item1 | A2   |       5 |      25 |
| item1 | A3   |       5 |      33 |
| item1 | A4   |       5 |      87 |
| item2 | A5   |       6 |      35 |
| item2 | A1   |       6 |      12 |
| item2 | A2   |       6 |      26 |
| item2 | A3   |       6 |      34 |
| item2 | A4   |      12 |      72 |
| item1 | A5   |       0 |      18 |
+-------+------+---------+---------+

Данные, в которых col2 = 'A5', должны быть упорядочены на основе значений столбца values2 в порядке возрастания или убывания.Можно ли этого достичь?

Если говорить точнее, давайте возьмем только col2 порядок.Если я закажу col2.Строки будут упорядочены по A1, A2, A3, A4, A5 без какой-либо зависимости от col values2.Здесь я спрашиваю, когда порядок, в частности данные A5 col2, строка A5 с максимальными значениями столбца values2 должны стоять на первом месте, а затем уменьшаться по убыванию,

Здесь мы предполагаем, когда я заказываюпо col2.у нас есть два данных с A5.

| item1 | A5   |       0 |      18 | 

и

| item2 | A5   |       6 |      35 |

Таким образом, второе значение должно стоять первым из-за более высоких значений столбца values2.Приходит первым, это не значит, что оно должно быть сверху, но я имею в виду, что оно должно быть после A4, но исходя из значений values2 для col2 = A5, более высокие значения должны идти после A4.

** отредактировал требование.

1 Ответ

1 голос
/ 11 марта 2019

Вы можете попробовать использовать предложение ORDER BY с двухуровневой сортировкой:

SELECT Col1, col2, values1, values2
FROM yourTable
ORDER BY
    CASE WHEN col2 = 'A5' THEN 0 ELSE 1 END,
    values2 DESC;

Это позволит разместить все записи, для которых сначала col2 = 'A5', а затем все остальные записи.В каждой из этих двух групп второе условие сортируется по убыванию values2.

Примечание: ОП несколько раз менял свой вопрос с тех пор, как я первоначально ответил.В первоначальном вопросе спрашивалось, как сначала заказать записи с col2 = 'A5', а затем все остальные записи.

...