SQL - разделить столбец на две колонки в Mysql - PullRequest
0 голосов
/ 11 октября 2018

У меня есть эта таблица.Учитывая, что идентификатор начинается с 0.

Таблица 1

ID     Letter
1        A
2        B
3        C
4        D
6        E

Мне нужен следующий вывод

Col1     Col2
NULL      A
B         C
D         NULL
E         NULL

Я попытался использовать объединение с id, id - 1 и id +1, но я не мог понять, как получить письмо на основе идентификаторов, также пробовал даже странную логику, но ничего не получалось.

Любая помощь приветствуется.

Спасибо

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Просто используйте условное агрегирование:

select max(case when id % 2 = 0 then letter end) as col1,
       max(case when id % 2 = 1 then letter end) as col2
from t
group by floor(id / 2);

Если вы предпочитаете, вы можете использовать mod() вместо %.MySQL поддерживает оба.

0 голосов
/ 11 октября 2018

Вы не разместили ядро ​​базы данных, поэтому я предполагаю, что PostgreSQL, где операнд модуля равен %.

Запрос должен быть:

select o.letter, e.letter
  from (
    select id, letter, id as base from my_table where id % 2 = 0
  ) o full outer join (
    select id, letter, (id - 1) as base from my_table where id % 2 <> 0
  ) e on e.base = o.base
  order by coalesce(o.base, e.base)

Пожалуйста, возьмитеследующий вариант с зерном соли, так как у меня нет способа проверить это в MySQL 5.6.При отсутствии полного внешнего объединения вы можете выполнить два внешних объединения, а затем объединить их, как показано ниже:

select * from (
  select o.base, o.letter, e.letter
    from (
      select id, letter, id as base from my_table where id % 2 = 0
    ) o left join (
      select id, letter, (id - 1) as base from my_table where id % 2 <> 0
    ) e on e.base = o.base
  union
  select e.base, o.letter, e.letter
    from (
      select id, letter, id as base from my_table where id % 2 = 0
    ) o right join (
      select id, letter, (id - 1) as base from my_table where id % 2 <> 0
    ) e on e.base = o.base
) x
order by base
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...