2017-04-06 66 views
4

我創建了3個查詢到我的Firebird數據庫。合併3火鳥查詢

1 - 獲取日期

select 
    distinct oh.FAMILY 
from 
    TRACKCODE_SUMMARY ts, 
    ORDER_HEAD oh 
where 
    oh.AMF_NUM = ts.AMF_NUM 
    and ts.DATE_INDUCTION >= '2017-04-06'; 

2所有家庭 - 獲取的日期和家庭

select 
    count(*) AS Produced 
from 
    trackcode_summary ts, 
    order_head oh 
where 
    ts.AMF_NUM = oh.AMF_NUM 
    and ts.date_induction >= '2017-04-06' 
    and oh.FAMILY like 'TULIP15BROAD'; 

3生產計數 - 獲取的日期和家庭

select 
    count(*) AS Failed 
from 
    trackcode_summary ts, 
    order_head oh 
where 
    ts.AMF_NUM = oh.AMF_NUM 
    and ts.date_induction >= '2017-04-06' 
    and (ts.emr >= 1 or ts.current_status = 200) 
    and oh.FAMILY like 'TULIP15BROAD'; 
失敗計數

這3個查詢完美分離。我需要合併成一個查詢。

我該怎麼做?

回答

4

如何

SELECT 
    oh.FAMILY 

    , 
    SUM 
    (
     CASE WHEN oh.FAMILY LIKE 'TULIP15BROAD' THEN 1 ELSE 0 END 
    ) AS Produced 

    , 
    SUM 
    (
     CASE WHEN (ts.emr >= 1 OR ts.current_status = 200) AND oh.FAMILY LIKE 'TULIP15BROAD' THEN 1 ELSE 0 END 
    ) AS Failed 

FROM 
    TRACKCODE_SUMMARY ts, 
    ORDER_HEAD oh 
WHERE 
    oh.AMF_NUM = ts.AMF_NUM 
    AND ts.DATE_INDUCTION >= '2017-04-06'; 

GROUP BY oh.FAMILY 

BTW,而不是LIKE 'TULIP15BROAD'你應該使用= 'TULIP15BROAD'

另外,我想你最好使用JOIN關鍵詞已獲得更好的清晰度。

FROM TRACKCODE_SUMMARY AS ts 

INNER JOIN ORDER_HEAD AS oh 
    ON oh.AMF_NUM = ts.AMF_NUM 
    AND ts.DATE_INDUCTION >= '2017-04-06'