Коррелированный подзапрос и арифметика c в Oracle SQL - PullRequest
1 голос
/ 06 февраля 2020

Это мой второй пост, я получил много хороших отзывов из первого поста о некоторых трудностях. Я работаю над улучшением моих навыков 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; как бы это включить? </p>

1 Ответ

0 голосов
/ 06 февраля 2020

Пока ваш столбец 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 и ниже, вы можете опустить =

...