我有一个表,其中包含一些ID,这些ID与我想摆脱的重复数据相对应。它们通过组号链接。目前,我的数据如下:
|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|
谢谢您的时间。
答案 0 :(得分:3)
您想要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;
答案 1 :(得分:0)
在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;
稍微复杂一点,但仍然只扫描表一次。