Полностью застрял с некоторым запросом на очень простой таблице - PullRequest
1 голос
/ 13 марта 2020

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

| Name  | Value1 | Value2 |
|-------|--------|--------|
| Aaa   |    2   |   5    |
|-------|--------|--------|
| Abb   |    4   |   X    |
|-------|--------|--------|
| Acc   |        |   2    |
|-------|--------|--------|
| Add   |    X   |        |
|-------|--------|--------|
| Baa   |        |   3    |
|-------|--------|--------|
| Bbb   |    X   |        |
|-------|--------|--------|
| Bcc   |    4   |   X    |
|-------|--------|--------|
| Bdd   |    1   |        |
|-------|--------|--------|

А вот как я бы сделал запрос, если бы MySql был человеком:

-Hi, не могли бы вы получить все из этой таблицы и упорядочить так, чтобы строки, содержащие «X» в Value1 или Value2, были на первом месте? Но имейте в виду, что имена, начинающиеся с "A", должны быть вместе, то же самое для "B", et c.

Ожидаемый результат:

| Name  | Value1 | Value2 |
|-------|--------|--------|
| Abb   |   4    |   X    |
|-------|--------|--------|
| Add   |   X    |        |
|-------|--------|--------|
| Aaa   |   2    |   5    |
|-------|--------|--------|
| Acc   |        |   2    |
|-------|--------|--------|
| Bbb   |   X    |        |
|-------|--------|--------|
| Bcc   |   4    |   X    |
|-------|--------|--------|
| Baa   |        |   3    |
|-------|--------|--------|
| Bdd   |   1    |        |
|-------|--------|--------|

Я пробовал бесчисленное количество комбинаций ORDER BY и GROUP BY безрезультатно.

Пожалуйста, помогите ...

Ответы [ 2 ]

2 голосов
/ 13 марта 2020

Что-то вроде

SELECT * FROM [table]
ORDER BY LEFT(Name, 1), 'X' in (Value1, Value2) DESC

Таким образом, он сначала будет упорядочен по первому символу в столбце «Имя» (в порядке возрастания), а затем порядок, основанный на «X», будет иметь значение 1 или значение 2 (по убыванию). порядок, поскольку 'X' in (Value1, Value2) вернет 1 или 0.

Надеюсь, что имеет смысл

1 голос
/ 13 марта 2020

Хорошо. Понял:

SELECT * FROM [table]
ORDER BY LEFT(Name, 1), 'X' in (Value1, Value2) DESC, Name

Спасибо @ paulslater19 за блестящую демонстрацию

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