Oracle SQL中的相关子查询和算法

问题描述 投票:1回答:1

[这是我的第二次发帖,第一篇发给我很多有关困难的反馈。我正在努力提高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的行;我将如何合并呢?

sql subquery correlated-subquery
1个回答
0
投票

只要您的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及以下,则可以省略=

© www.soinside.com 2019 - 2024. All rights reserved.