我在表中有以下几行。在这种情况下,atr列可以用于任何其他用途,因此我想将这3行移动到一行,将每个唯一的sup_name移到任何一个atr列。
我想将列sup_name条目移至其各自的单独列,以避免冗余。
Program.Main
我希望它最终如下所示
CREATE TABLE dups
( dups_id number(10) NOT NULL,
dups_name varchar2(50) NOT NULL,
sup_name varchar2(50)
atr1 varchar2(50)
atr2 varchar2(50)
atr3 varchar2(50)
atr4 varchar2(50)
);
insert into dups(dups_id,dups_name,sup_name,atr1,atr2,atr3)
values(1,'Resego Kebopetswe', 'resego231dty',null,null,null)
insert into dups(dups_id,dups_name,sup_name,atr1,atr2,atr3)
values(2,'Resego Kebopetswe', 'resego532dty',null,null,null)
insert into dups(dups_id,dups_name,sup_name,atr1,atr2,atr3)
values(3,'Resego Kebopetswe', 'resego420qas',null,null,null)
dups_id dups_name sup_name atr1 atr2 atr3
1 Resego Kebopetswe resego231dty null null null
2 Resego Kebopetswe resego532dty null null null
3 Resego Kebopetswe resego420qas null null null
答案 0 :(得分:0)
此数据透视查询在atr1
... atr4
列中显示重复名称的sup_names。
select sup_name_id dups_id, dups_name, sup_name, atr1, atr2, atr3, atr4
from (select dups_id, dups_name, sup_name,
row_number() over (partition by dups_name order by dups_id) rn
from dups d)
pivot(min(dups_id) id, max(sup_name) for rn in (1 sup_name, 2 atr1, 3 atr2, 4 atr3, 5 atr4))
DUPS_ID DUPS_NAME SUP_NAME ATR1 ATR2 ATR3 ATR4
------- ------------------ ------------ ------------ ------------ ------- --------
1 Resego Kebopetswe resego231dty resego532dty resego420qas
如果要更新表中的值,请使用merge
中的此查询作为源数据。