Как объединить два столбца из одной таблицы в один столбец, используя sql - PullRequest
0 голосов
/ 09 июля 2020

Пожалуйста, мне нужен способ объединить 2 столбца из одной таблицы. У меня есть таблица, скажем, my_Table. Я извлек всего несколько столбцов, которые меня интересуют, как показано в таблице ниже, используя следующий оператор:

select distinct ONES, TWOS, TYPE, THREES, FOURS, FIRST, LAST, LEG_1, LEG_2, DATE from my_Table;

Результат такой, как показано:

+-----+-----+----+-------+-------+------+-----+------+------+-----------+
|ONES |TWOS |TYPE|THREES |FOURS  |FIRST |LAST |LEG_1 |LEG_2 |DATE       |
+-----+-----+----+-------+-------+------+-----+------+------+-----------+
|AAAA1|AAAA2|O   |AAAA3  |null   |null  |null |INC   |WELL  |null       |
|BBBB1|BBBB2|P   |null   |BBBB4  |DALE  |BETY |null  |null  |2020-01-01 |
|CCCC1|CCCC2|P   |null   |CCCC4  |KENT  |SALA |null  |null  |2018-10-18 |
|DDDD1|DDDD2|P   |null   |DDDD4  |KYLE  |GIRE |null  |null  |2020-04-24 |
+-----+-----+----+-------+-------+------+-----+------+------+-----------+

Я выполняю операцию UNION чтобы объединить столбцы «THREES» и «FOURS» в столбец «BOTH», как показано в инструкции select ниже,

select * from (select distinct ONES, TWOS, TYPE, THREES as BOTH, FIRST, LAST, LEG_1, LEG_2, DATE from my_Table) UNION (select distinct ONES, TWOS, TYPE, FOURS as BOTH, FIRST, LAST, LEG_1, LEG_2, DATE from my_Table)

Получен следующий результат

+-----+-----+----+-----+-----+-----+------+-----+-----------+
|ONES |TWOS |TYPE|BOTH |FIRST|LAST |LEG_1 |LEG_2|DATE       |
+-----+-----+----+-----+-----+-----+------+-----+-----------+
|CCCC1|CCCC2|P   |null |KENT |SALA |null  |null |2018-10-18 |
|AAAA1|AAAA2|O   |null |null |null |INC   |WELL |null       |
|AAAA1|AAAA2|O   |AAAA3|null |null |INC   |WELL |null       |
|BBBB1|BBBB2|P   |null |DALE |BETY |null  |null |2020-01-01 |
|DDDD1|DDDD2|P   |DDDD4|KYLE |GIRE |null  |null |2020-04-24 |
|DDDD1|DDDD2|P   |null |KYLE |GIRE |null  |null |2020-04-24 |
|CCCC1|CCCC2|P   |CCCC4|KENT |SALA |null  |null |2018-10-18 |
|BBBB1|BBBB2|P   |BBBB4|DALE |BETY |null  |null |2020-01-01 |
+-----+-----+--- +-----+-----+-----+------+-----+-----------+

Как я могу выполните операцию так, чтобы мой окончательный результат был таким, как показано ниже

+-----+-----+----+-----+-----+-----+------+-----+-----------+
|ONES |TWOS |TYPE|BOTH |FIRST|LAST |LEG_1 |LEG_2|DATE       |
+-----+-----+----+-----+-----+-----+------+-----+-----------+
|AAAA1|AAAA2|O   |AAAA3|null |null |INC   |WELL |null       |
|DDDD1|DDDD2|P   |DDDD4|KYLE |GIRE |null  |null |2020-04-24 |
|CCCC1|CCCC2|P   |CCCC4|KENT |SALA |null  |null |2018-10-18 |
|BBBB1|BBBB2|P   |BBBB4|DALE |BETY |null  |null |2020-01-01 |
+-----+-----+--- +-----+-----+-----+------+-----+-----------+

Спасибо

Ответы [ 3 ]

2 голосов
/ 09 июля 2020

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

select distinct
    ONES, TWOS, TYPE,
    coalesce(THREES, FOURS) as BOTH,
    FIRST, LAST, LEG_1, LEG_2, DATE
from my_Table;
1 голос
/ 09 июля 2020

Используйте coalesce, чтобы выбрать первое ненулевое значение.

select distinct
  ONES, TWOS, TYPE,
  coalesce(THREES, FOURS) as BOTH,
  FIRST, LAST, LEG_1, LEG_2, DATE
from my_Table;
0 голосов
/ 09 июля 2020

вы можете сделать последнее утверждение отдельным,

select distinct * FROM()
...