使用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
答案 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;