2014-03-27 2 views
0

세부 레코드가 너무 세분화되어 있으며 내 설명을 종류별로 그룹화하고 싶습니다. 오라클 분석 기능을 사용하려면 어떻게해야합니까? 필자는 분석 도구를 사용하는 편이 더 낫습니다. 왜냐하면 이것은 훨씬 더 큰 쿼리의 스 니펫이고 일부 열은 분석 함수를 호출하기 때문입니다. 이 기존 쿼리에 다른 열을 추가하고 싶습니다.분석을 사용하여 세밀도를 줄이는 방법은 무엇입니까?

select lumber_vend, 
    case lumber_code 
      when 'H1' then 'HARDWOOD' 
      when 'O1' then 'OAK' 
      when 'O2' then 'OAK' 
      when 'P1' then 'PINE' 
      when 'P2' then 'PINE' 
      when 'P3' then 'PINE' 
    else 'OTHER' 
    end as variety, 
      rank() over (partition by lumber_code, 
            lumber_vend, 
           case lumber_code 
           when 'H1' then '1' 
           when 'O1' then '2' 
           when 'O2' then '2' 
           when 'P1' then '3' 
           when 'P2' then '3' 
           when 'P3' then '3' 
           else 'OTHER' 
           end           
         order by lumber_desc) as ranking         
    from lumber_detail 

My Attempt on Fiddle

원하는 결과

AAA HARDWOOD 
AAA PINE 
AAA OAK 

답변

1

I 해요 당신이 요구하는 것을 100 % 확인합니다. 결국, group by은 원하는 출력을 얻는 데 가장 적합합니다. 각 그룹에서 하나 개의 행을 선택

select lumber_vend, 
     (case lumber_code 
      when 'H1' then 'HARDWOOD' 
      when 'O1' then 'OAK' 
      when 'O2' then 'OAK' 
      when 'P1' then 'PINE' 
      when 'P2' then 'PINE' 
      when 'P3' then 'PINE' 
      else 'OTHER' 
     end) as variety, 
     row_number() over (partition by lumber_vend, 
          (case lumber_code 
             when 'H1' then '1' 
           when 'O1' then '2' 
           when 'O2' then '2' 
           when 'P1' then '3' 
           when 'P2' then '3' 
           when 'P3' then '3' 
           else 'OTHER' 
          end) 
          order by lumber_vend 
        ) as ranking         
from lumber_detail; 

이것은 당신이 where ranking = 1을 할 수 있습니다 : 각 공급 업체 및 다양한 행을 열거 싶은 경우, 다음 대신 rank()row_number()을 사용하고 더 나은 order by 용어를 사용합니다.

+0

고든, 잘 압니다. 가능하다면'그룹별로 '피하고 싶었습니다. 이것은 내가 원하는 것입니다. http://sqlfiddle.com/#!4/e2a20/28. 감사. – zundarz

관련 문제