我有一个名为sites的Oracle表,其中有多个同名记录。例如:
Owner Name Contact Name Owner Address Contact Address
A A XYZ SDF
A D ABC JKL
B E QWE YUR
B F JKL SFD
C C ZXC ASD
B G BNM SAD
我的SQL查询应该返回
A1 XYZ
A2 ABC
A3 SDF
B1 QWE
B2 JKL
B3 BNM
C1 ZXC
C2 ASD
D JKL
E YUR
F SFD
G SAD
有人可以帮我写这样的查询。理想情况下,我不喜欢单个记录的数字后缀,但如果它简化了查询,我也可以这样做。
答案 0 :(得分:4)
您可以使用union
创建您想要的内容:
with the_data as (
select owner_name as name, owner_address as address
from my_table
union all
select contact_name as name, contact_address as address
from my_table
)
select name
|| case when count(*) over ( partition by name ) = 1 then ''
else to_char(row_number() over ( partition by name
order by address ))
end
, address
from the_data
如果您只想要不同的地址,则联系人组合会将union all
更改为union
。 Here it is in SQL Fiddle form
答案 1 :(得分:0)
在第一个查询中对“所有者名称”列进行分区 - >查询1 在第二个查询中的“联系人姓名”列上进行分区 - >查询2
联盟查询1&查询2