Создание запроса, который создает столбец из двух столбцов - PullRequest
0 голосов
/ 13 мая 2019

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

ID | LOC | NAMEA | NAMEB
------------------------
 0 |  BL |     X |     Y
 1 |  BG |     Z |  NULL

Я хочу знать, возможно ли написать запрос, который возвращает это из таблицы:

ID | LOC | NAME
------------------------
 0 |  BL |    X 
 0 |  BL |    Y
 1 |  BG |    Z

Я знаю, что если мне нужно это использовать, база данных плохая, и я не планирую это делать, но я просто хочу знать, возможно ли это и как.

Ответы [ 5 ]

1 голос
/ 13 мая 2019

Вы можете использовать это-

SELECT ID, LOC, NAMEA AS NAME
FROM your_table
WHERE NAMEA IS NOT NULL

UNION ALL

SELECT ID, LOC, NAMEB AS NAME
FROM your_table
WHERE NAMEB IS NOT NULL
1 голос
/ 13 мая 2019

UNION (ALL) помогает:

SQL> with test (id, loc, namea, nameb) as
  2    (select 0, 'BL', 'X', 'Y' from dual union all
  3     select 1, 'BG', 'Z', NULL from dual
  4    )
  5  select id, loc, namea from test where namea is not null
  6  union all
  7  select id, loc, nameb from test where nameb is not null
  8  order by id;

        ID LO N
---------- -- -
         0 BL X
         0 BL Y
         1 BG Z

SQL>
0 голосов
/ 13 мая 2019

У меня нет прямого запроса, чтобы вернуть результат, упомянутый выше, но вы можете попробовать следующие шаги.Сделав это, вы создадите новую таблицу с данными, которые вам нужны в качестве вывода.Шаг 1:

`create table test2 as (select id,loc,namea from test1);`

Шаг 2: create table test3 as (select id,loc,nameb from test1);

Шаг 3: insert into test2(id,loc,namea) select * from test3 where nameb='y';

Шаг 4: select * from test2

Еще одинвещь namea, nameb должен иметь одинаковый размер данных.

0 голосов
/ 13 мая 2019

Вы хотите union all:

select t.*
from (select t.id, t.loc, t.namea as name
      from table t
      union all
      select t.id, t.loc, t.nameb
      from table t
     ) t
where name is not null
order by id;
0 голосов
/ 13 мая 2019

Использование union all

select id, loc,nameA from tablename where nameA is not null
union all
select id, loc,nameB from tablename where nameB is not null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...