根据唯一ID将记录拆分为2个具有不同值的记录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据唯一ID将记录拆分为2个具有不同值的记录相关的知识,希望对你有一定的参考价值。

我有一个表,其中包含一些ID,这些ID对应于我想要删除的重复数据。它们由groupid编号链接。目前我的数据如下所示:

|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|

感谢您的时间。

答案

你想要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;
另一答案

在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;

稍微复杂一点,但仍然只有一次扫描表。

以上是关于根据唯一ID将记录拆分为2个具有不同值的记录的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据集拆分为两个具有唯一和重复行的数据集?

sql查询以选择两列中具有相同id但不同值的记录

Java为具有唯一ID的每条记录创建对象

稀疏数组

删除数据库现有记录,同时将值从一行分配给具有唯一值的另一行

根据唯一ID将pandas数据框划分为测试和训练