合并 3 个 Firebird 查询
Merge 3 Firebird queries
我对我的 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 个查询完全分开工作。我需要合并到一个查询中。
我该怎么做?
怎么样
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
顺便说一句,您应该使用 = 'TULIP15BROAD'
而不是 LIKE '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'
我对我的 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 个查询完全分开工作。我需要合并到一个查询中。
我该怎么做?
怎么样
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
顺便说一句,您应该使用 = 'TULIP15BROAD'
LIKE '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'