2012-11-05 3 views
0
나는 현재 내 쿼리에서이 출력을 얻고있다

: -변경 행

Count(Total)| Type1 
----------------- 
24   T1 

    22   T2 

하지만 내가 원하는과 같이 출력 : - Type1 열 원하는 값을 포함 할 수 있습니다

T1 T2 
---------- 
24 22 

하는 것으로 T1, T2, T3 쿼리에서 값을 수정할 수 없습니다. Oracle 10g를 사용하고 있습니다. 어떻게 할 수 있습니까? 당신이 CASE으로 집계을 사용할 수 있도록

답변

1

오라클 10g는 PIVOT 기능이 없습니다 : SQL Fiddle with Demo

를 참조

select 
    sum(case when type1 = 'T1' then total end) T1, 
    sum(case when type1 = 'T2' then total end) T2 
from <yourquery goes here> 

아니면를 사용하여, 직접이 유사한 쿼리에이를 구현할 수 있습니다 SUM() 집계는 CASE 문에있는 type1 값과 일치하는 각 항목을 계산합니다.

select 
    sum(case when type1 = 'T1' then 1 else 0 end) T1, 
    sum(case when type1 = 'T2' then 1 else 0 end) T2 
from yourtable 

당신이 열로 변환 값을 알 수없는 번호가있는 경우에, 당신이 유사한 절차를 사용하는 것이 좋습니다 :

CREATE OR REPLACE procedure dynamic_pivot(p_cursor in out sys_refcursor) 
as 
    sql_query varchar2(1000) := 'select '; 

    begin 
     for x in (select distinct type1 from yourtable order by 1) 
     loop 
      sql_query := sql_query || 
       ' , sum(case when type1 = '''||x.type1||''' then 1 else 0 end) as '||x.type1; 

       dbms_output.put_line(sql_query); 
     end loop; 

     sql_query := sql_query || ' from yourtable'; 

     open p_cursor for sql_query; 
    end; 
/

이 그 다음을 실행 :

variable x refcursor 
exec dynamic_pivot(:x) 
print x 
+0

타입 1 열은 포함 할 수 있습니다 T1, T2, T3 같은 모든 값 ... 쿼리에서 수정할 수 없습니다. – F11

+0

@Devesh 내 편집을 참조하십시오. 동적 버전의 샘플을 추가했습니다 – Taryn

+0

이 절차는 작동하지 않습니다 – F11