Разделить запись на 2 записи с разными значениями на основе уникального идентификатора - PullRequest
1 голос
/ 07 марта 2019

У меня есть таблица с некоторыми идентификаторами, которые соответствуют дубликатам данных, от которых я хотел бы избавиться.Они связаны номером группы.В настоящее время мои данные выглядят так:

|GroupID|NID1  |NID2  |
|S1     |644763|643257|
|T2     |4759  |84689 |
|W3     |96676 |585876|

Для запуска программного обеспечения мне нужны данные в следующем формате:

|GroupID|NID   |
|S1     |644763|
|S1     |643257|
|T2     |4759  |
|T2     |84689 |
|W3     |96676 |
|W3     |585876|

Спасибо за ваше время.

Ответы [ 2 ]

3 голосов
/ 07 марта 2019

Вы хотите union all:

select groupid, nid1 as nid
from table t
union all -- use "union" instead if you don't want duplicate rows
select groupid, nid2
from table t;
0 голосов
/ 07 марта 2019

В Oracle 12C + вы можете использовать боковые объединения:

select t.groupid, v.nid
from t cross apply
     (select t.nid1 as nid from dual union all
      select t.nid2 as nid from dual
     ) v;

Это более эффективно, чем union all, поскольку оно сканирует таблицу только один раз.

Вы также можете выразить это как:

select t.groupid,
       (case when n.n = 1 then t.nid1 when n.n = 2 then t.nid2 end) as nid
from t cross join
     (select 1 as n from dual union all select 2 from dual) n;

Немного сложнее, но все еще только один просмотр таблицы.

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