使用SQL创建ID X-ref表

时间:2018-07-27 20:35:32

标签: sql netezza

使用SQL,我试图将关联在一起的ID分组在一起。对于每个关联的ID组,我需要将最小值保留为组ID,然后将组中所有不同的值列为唯一ID。输入数据按以下顺序显示,并且相关的ID始终位于相邻的行上。

--SAMPLE INPUT DATA  
CREATE TEMPORARY TABLE INPUT_TBL  
  (ID1  INTEGER,  
   ID2  INTEGER);  

INSERT INTO INPUT_TBL (ID1,ID2) SELECT 101,105;  
INSERT INTO INPUT_TBL (ID1,ID2) SELECT 105,102;  
INSERT INTO INPUT_TBL (ID1,ID2) SELECT 102,105;  
INSERT INTO INPUT_TBL (ID1,ID2) SELECT 204,210;  
INSERT INTO INPUT_TBL (ID1,ID2) SELECT 210,203;  
INSERT INTO INPUT_TBL (ID1,ID2) SELECT 203,210;  
INSERT INTO INPUT_TBL (ID1,ID2) SELECT 301,302;  
INSERT INTO INPUT_TBL (ID1,ID2) SELECT 302,303;  
INSERT INTO INPUT_TBL (ID1,ID2) SELECT 303,307;  
INSERT INTO INPUT_TBL (ID1,ID2) SELECT 307,305;  
INSERT INTO INPUT_TBL (ID1,ID2) SELECT 305,307;

输入文件

Id-1 Id-2  
101  105  
105  102  
102  105  
204  210  
210  203  
203  210  
301  302  
302  303  
303  307  
307  305  
305  307  

所需的输出:

Group Id    Unq Id  
101         101  
101         105  
101         102  
203         204  
203         210  
203         203  
301         301  
301         302  
301         303  
301         307  
301         305  

1 个答案:

答案 0 :(得分:0)

您可以这样做:

with ids as
(
Select Id1 as ID from INPUT_TBL
union 
Select Id2 as ID from INPUT_TBL
),
iGroups as 
(
select cast(id/100 as int) as iGroup, min(ID) as groupID
from ids
group by cast(id/100 as int)
)
select ig.GroupID, ids.id as UnqID
from ids 
inner join iGroups ig on cast(ids.id/100 as int) = ig.iGroup
order by ig.GroupID, ids.id;