2012-08-08 3 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

답변

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 allunion에 변경합니다. Here it is in SQL Fiddle form.

0

첫 번째 쿼리의 소유자 이름 열에서 파티션을 수행 -> 1 이 두 번째 질의에 담당자 이름 컬럼에 파티션을 수행 쿼리 -> 쿼리 2

할 일 연합 쿼리 1 개 & 쿼리 2

관련 문제