2012-08-08 81 views
-1

我有一個稱爲站點的Oracle表,其中有多個相同名稱的記錄。對於例如:使用兩列進行分區的SQL查詢

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 

有人能幫助我寫這樣的query.Ideally,我不會像單記錄的數字後綴,但如果它簡化了查詢我也可以用它來做。

+2

[你嘗試過什麼?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) – hims056 2012-08-08 07:19:22

回答

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 allunionHere it is in SQL Fiddle form

0

信息在第一查詢所有者名稱列分區 - >查詢1 信息在第二次查詢聯絡人姓名列分區 - >查詢2

待辦事項聯合查詢1個&查詢2