-1

我有一个名为 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

有人可以帮我写这样的查询吗?理想情况下,我不喜欢带有单个记录的数字后缀,但如果它简化了查询,我也可以这样做。

4

2 回答 2

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这里是 SQL Fiddle 形式

于 2012-08-08T07:21:22.447 回答
0

在第一个查询中对所有者姓名列进行分区 -> 查询 1 在第二个查询中对联系人姓名列进行分区 -> 查询 2

执行联合查询 1 和查询 2

于 2015-06-04T08:58:00.263 回答