使用两列进行分区的SQL查询

时间:2012-08-08 06:54:17

标签: sql oracle oracle10g

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

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

2 个答案:

答案 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更改为unionHere it is in SQL Fiddle form

答案 1 :(得分:0)

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

联盟查询1&查询2