[这是我的第二次发帖,第一篇发给我很多有关困难的反馈。我正在努力提高SQL技能并建立此查询,但我不知道该如何处理]
*我设法纠正了问题中的所有原始错误,但最后一个疑问*
select wo.si_number,ivh.total_cost, wo.bill_name,pnm.pn, pnm.description, woqh.approved_date,ivh.total_price,
(select sum(ivh.total_price - ivh.total_cost) / nullif(ivh.total_price,0) from invc_header ivh where wqh_auto_key = wqh.wqh_auto_key group by ivh.total_price) as CTP,
ivh.post_date, wwt.description, wqh.WQH_AUTO_KEY, wqh.POST_DESC
from wo_operation wo, parts_master pnm,wo_quote_header wqh,
wo_quote_detail wqd, invc_header ivh, wo_work_type wwt, wo_quote_header woqh
where wo.pnm_auto_key = pnm.pnm_auto_key
and wo.woo_auto_key = wqd.woo_ref
and wqd.wqh_auto_key = wqh.wqh_auto_key
and wqh.WQH_NUMBER = woqh.WQH_NUMBER
and ivh.wqh_auto_key (+)= wqh.wqh_auto_key
and wwt.wwt_auto_key (+)= wo.wwt_auto_key
and wo_type = 'External'
and wqh.POST_DESC is not NULL
and woqh.approved_date between to_date('01/01/2020', 'MM/DD/YYYY') and to_date('01/31/2020', 'MM/DD/YYYY')
order by ctp
我不确定如何让脚本只提取ctp <30的行;我将如何合并呢?
只要您的CTP列是一个数字,您可以将其添加到WHERE
中,如下所示,我将其添加到查询的WHERE
子句的末尾。
SELECT wo.si_number,
ivh.total_cost,
wo.bill_name,
pnm.pn,
pnm.description,
woqh.approved_date,
ivh.total_price,
(
SELECT SUM(ivh.total_price - ivh.total_cost) / NULLIF(ivh.total_price, 0)
FROM invc_header ivh
WHERE wqh_auto_key = wqh.wqh_auto_key
GROUP BY ivh.total_price
) AS CTP,
ivh.post_date,
wwt.description,
wqh.WQH_AUTO_KEY,
wqh.POST_DESC
FROM wo_operation wo,
parts_master pnm,
wo_quote_header wqh,
wo_quote_detail wqd,
invc_header ivh,
wo_work_type wwt,
wo_quote_header woqh
WHERE wo.pnm_auto_key = pnm.pnm_auto_key
AND wo.woo_auto_key = wqd.woo_ref
AND wqd.wqh_auto_key = wqh.wqh_auto_key
AND wqh.WQH_NUMBER = woqh.WQH_NUMBER
AND ivh.wqh_auto_key (+)= wqh.wqh_auto_key
AND wwt.wwt_auto_key (+)= wo.wwt_auto_key
AND wo_type = 'External'
AND wqh.POST_DESC IS NOT NULL
AND woqh.approved_date BETWEEN to_date('01/01/2020', 'MM/DD/YYYY') AND to_date('01/31/2020', 'MM/DD/YYYY')
AND CTP <= 30
ORDER BY ctp;
简单的小于或等于运算将您的结果过滤到所需的范围,因此您只能得到小于30的结果。另外,如果需要29及以下,则可以省略=