2009-06-03 5 views
1

나는이 이런 식으로 뭔가 보이는 테이블 :오라클 8i를 쿼리 도움말

 ID |  STATUS |  TYPE 
---------------------------------------- 
x123  |  A  | High School 
x122  |  I  | High School 
x124  |  F  | High School 
x125  |  A  | College 
x126  |  I  | College 
x127  |  F  | College 
x128  |  F  | College 

사람이 날이

Type    | Count A | Count I | Count F 
------------------------------------------------------------ 
High School  |  1   |  1   | 1 
College   |  1   |  1   | 2 

감사처럼이 테이블을 표시 오라클 8i를위한 쿼리 마련 도울 수를 !

select t.type           as "Type" 
    , sum(case when t.status = 'A' then 1 else 0 end) as "Count A" 
    , sum(case when t.status = 'I' then 1 else 0 end) as "Count I" 
    , sum(case when t.status = 'F' then 1 else 0 end) as "Count F" 
    from my_table t 
group by t.type 
order by t.type desc 

이 당신이 반환하려는 특정 열이있는 경우 작동 및 설정 더 복잡한 기준을 충족하는 "계산"행에 대해 작동합니다

답변

6

여기에 한 가지 방법입니다.

[편집]

(롭 반 Wijk 영업 이익, 1 풍어 같이 정렬 된 결과 집합을 얻을 수있는 DESC 키워드를 추가!)

(Andomar 더와 함께, 좋은 관찰한다 이 방법을 사용하면 결과 집합에 더 많은 열을 넣을 수 있으며 문이 불투명 해집니다. "테스트"만 단일 열에 대한 동일성 비교 인 경우 동일한 결과 집합을 얻는 다른 방법이 있습니다.

Oracle 8i는 CASE 표현식을 지원합니까? 오라클 8은 제대로 기억하지 못했습니다.

select t.type      as "Type" 
    , sum(decode(t.status,'A',1,0)) as "Count A" 
    , sum(decode(t.status,'I',1,0)) as "Count I" 
    , sum(decode(t.status,'F',1,0)) as "Count F" 
    from my_table t 
group by t.type 
order by t.type DESC 

[/ 편집] 때로는

, 우리는 여러 유형의 상태를 확인하고 싶은, 그리고 더의 행을 포함한다 : 우리는 DECODE 기능과 같은 일을 "오래된 학교"를 갈 수 있습니다 1 카운트 이상. 우리가 얻을 수있는 총

select t.type            as "Type" 
    , sum(case when t.status in ('A') then 1 else 0 end) as "Count A" 
    , sum(case when t.status in ('I') then 1 else 0 end) as "Count I" 
    , sum(case when t.status in ('F') then 1 else 0 end) as "Count F" 
    , sum(case when t.status in ('A','I') then 1 else 0 end) as "#AI" 
    , sum(decode(sign(t.foo-t.bar),1,1,0))    as "#foo>bar" 
    , sum(decode(sign(10.0-t.foo),1,1,0))    as "#foo<10" 
    from my_table t 
group by t.type 
order by t.type desc 

(행이 여러 열에 대한 지정 기준을 만족하는 단지 지적, 그것은 가능하고, 그래서 한 번 이상은. 가끔, 즉 정확히 "계산"할 수있는 것을 우리 원하는 것입니다.)

+0

+1 100+ 다른 상태 인 경우 다음과 같이 분해됩니다. – Andomar

+1

+1 좋은 구식 피벗 솔루션. 주문 만 내림차순이어야합니다 :-) –

+0

Thanks spencer! 완벽하게 작동합니다! – zSynopsis