2016-06-21 2 views
0

다음과 같은 결과가 나오는보기가 있습니다.다른 행과 함께 여러 열이있는 동일한 행을 가져 오는 중

comp  Sub-comp Lognum id   Firname  LAstname 

AK  AK-G  0  3897   ABC   DEF 
AK  AK-G  0  5432   mark  ray 
MC  MC-A  0  1234   john  steve 
MC  MC-A  0  5678   dan   pitcher 
MC  MC-A  0  9843   james  robin 
MC  MC-A  84  1234   john  steve 
MC  MC-A  84  5678   dan   pitcher 
MC  MC-A  84  9843   james  robin 

난 그냥 0 lognum 등을 가지고 다른 행과 함께 (같은 행이 lognum로도 0이있는 경우)를 lognum이있는 유일한 행을 인출하려고합니다.

결과 테이블이

comp  Sub-comp Lognum id   Firname  LAstname 

AK  AK-G  0  3897   ABC   DEF 
AK  AK-G  0  5432   mark  ray 
MC  MC-A  84  1234   john  steve 
MC  MC-A  84  5678   dan   pitcher 
MC  MC-A  84  9843   james  robin 

처럼되어야하고,

create view view1 as 
select 
comp, Sub-comp, "00" as Lognum, id ,Firname ,LAstname 
from 
table A 
inner joins--- 
UNION 
select 
select 
comp, Sub-comp, Lognum, id ,Firname ,LAstname from 
table B 
inner joins---- 
; 

사람이 도와 드릴까요 다음과 같이 쿼리의 윤곽은?

감사합니다.

+0

더 큰 로그 번호가 필요한 라인이 필요합니까? –

+0

일종의 예. 행에 0이 lognum 인 경우 lognum으로 일부 값을 포함하는 행만 필요합니다. – Cooluser

+0

어떤 데이터베이스입니까? 오라클 또는 포스트그레스? 또한 'id'가 같지만 'lognum'이 아닌 행이 여러 개있는 경우 무엇을 보여줄 수 있습니까? 행 중 하나만 전부 또는 전부입니까? – sstan

답변

0

이 시도 :

select * from(
    select comp, 
      Sub-comp, 
      Lognum, 
      id, 
      Firname, 
      LAstname, 
      row_number() over(partition by id order by lognum desc) rn 
    from table_name) 
where rn = 1; 

이는 ID별로 그룹화 가장 큰 lognum으로 라인을 보여줍니다.

0

주어진 id 값에 대해 "0 이외의 값"lognum 행이있는 경우에도이 쿼리가 작동합니다.

where 절을 보면 0이 아닌 행이 항상 lognum으로 반환됩니다 (t.Lognum != 0). 그러나 lognum 값이 0 인 행은 반환되지만, t.rn = 1 조건이 참인 경우에만 해당합니다. id에 대해 0 이외의 lognum이없는 경우에만 발생합니다 (row_number() 창 함수의 절 참조) .

select t.comp, 
     t.Sub-comp, 
     t.Lognum, 
     t.id, 
     t.Firname, 
     t.LAstname 
    from (select t.*, 
       row_number() over (
       partition by t.id 
        order by case when t.lognum = 0 then 1 else 0 end) as rn 
      from your_view t) t 
where t.Lognum != 0 or t.rn = 1 
관련 문제