2012-11-20 57 views
0

我正在使用Oracle數據庫,並且遇到了來自2個結果集的一個結果的問題。Oracle 11g:如何合併兩個結果集

我有表案例

Create table cases (ID varchar(1), date_entered date, sub_category varchar (5)); 

insert into cases (id, date_entered, sub_category) 
values('1', to_date('2012/05/03','yyyy/mm/dd'),'Temp1'); 
insert into cases (id, date_entered, sub_category) 
values('2', to_date('2012/06/01','yyyy/mm/dd'),'Temp2'); 
insert into cases (id, date_entered, sub_category) 
values('3', to_date('2012/03/15','yyyy/mm/dd'),'Temp3'); 
insert into cases (id, date_entered, sub_category) 
values('4', to_date('2012/03/01','yyyy/mm/dd'),'Call1'); 
insert into cases (id, date_entered, sub_category) 
values('5', to_date('2012/03/08','yyyy/mm/dd'),'Call2'); 
insert into cases (id, date_entered, sub_category) 
values('6', to_date('2012/02/20','yyyy/mm/dd'),'Call2'); 

,但需要計算記錄由副類別,分月,其中一個計數包括sub_category:TEMP1,TEMP2,TEMP3 其他數包括sub_category:CALL1,CALL2 ,Call3

我已QUERY1:

With skills 
    AS 
    ( 
      Select sub_category, 
       date_entered, 
       extract(MONTH FROM cases.date_entered) as month_entered, 
       count (*) 
      from cases 
      where 
       SUB_CATEGORY IN('Temp1', 'Temp2', 'Temp3') 


      group by cases.sub_category, cases.date_entered 
      order by to_char(cases.date_entered,'MM') 
    ) 

    select s.month_entered, 
      count(*)as skill_count 
      from skills s 

    group by s.month_entered 
    ORDER BY CAST(s.month_entered AS INTEGER) ASC 

隨r esult:

MONTH_ENTERED SKILL_COUNT 
3    1 
5    1 
6    1 

和查詢2:

With training 
AS 
( 
     Select sub_category, 
      date_entered, 
      extract(MONTH FROM cases.date_entered) as month_entered, 
      count (*) 
     from cases 
     where 
      SUB_CATEGORY IN('Call1', 'Call2', 'Call3') 


     group by cases.sub_category, cases.date_entered 
     order by to_char(cases.date_entered,'MM') 
) 

select t.month_entered, 
     count(*)as training_count 
     from training t 

group by t.month_entered 
ORDER BY CAST(t.month_entered AS INTEGER) ASC 

與結果:

MONTH_ENTERED TRAINING_COUNT 
2    1 
3    2 

,我從這些2次的查詢需要的結果是:

MONTH_ENTERED SKILL_COUNT TRAINING_COUNT 
    2    0   1 
    3    1   2 
    5    1   0 
    6    1   0 

試過工會並離開加入但沒有給我這個結果...

這裏是sqlfiddle例如http://sqlfiddle.com/#!4/504cd/31

請幫幫忙,這是迫切和我卡! 謝謝提前

GuiGi答案接受。 你能幫助我嗎?或者我需要新的問題? 如果我想在一年中的所有其他月份顯示零而哪些不在表格中,應該向查詢添加什麼內容?

回答

2
SELECT 
    EXTRACT(MONTH FROM CASES.DATE_ENTERED) AS MONTH_ENTERED, 
    COUNT (CASE WHEN SUB_CATEGORY IN('Temp1', 'Temp2', 'Temp3') THEN 1 END) SKILL_COUNT, 
    COUNT (CASE WHEN SUB_CATEGORY IN('Call1', 'Call2', 'Call3') THEN 1 END) TRAINING_COUNT 
FROM CASES 
GROUP BY EXTRACT(MONTH FROM DATE_ENTERED) 
ORDER BY MONTH_ENTERED ASC 
+0

太好了。感謝您的努力和快速回答。 – lana80

2

我想你可以大大簡化查詢到類似:

 Select extract(MONTH FROM cases.date_entered) as month_entered, 
      sum(case when SUB_CATEGORY IN('Temp1', 'Temp2', 'Temp3') then 1 else 0 end) as Skill_Count, 
      sum(case when SUB_CATEGORY IN('Call1', 'Call2', 'Call3') then 1 else 0 end) as Skill_Count, 
     from cases 
     group by extract(MONTH FROM cases.date_entered) 
     order by extract(MONTH FROM cases.date_entered) 
+0

感謝快速回答和簡化!它接近解決方案,但它爲行軍提供3行。看起來GuiGi的回答對此更好。 – lana80

+0

你說得對。 。 。聲明的一部分我錯過了小組。 –