Операция SQL Math в коррелированном подзапросе - PullRequest
0 голосов
/ 07 ноября 2018

Я работаю с тремя таблицами, в основном, одна представляет собой ведомость материалов, одна содержит перечень деталей, а последняя содержит рабочие задания или задания. Я пытаюсь выяснить, возможно ли иметь коррелированный подзапрос, который может выполнять математическую операцию, используя значение из внешнего запроса. Вот пример того, что я пытаюсь сделать:

SELECT A.work_order,A.assembly,A.job_quantity,
    (SELECT COUNT(X.part_number)
    FROM bom X
    WHERE X.assembly = A.assembly
    AND (X.quantity_required * A.job_quantity) >= (SELECT Y.quantity_available FROM inventory Y WHERE 
Y.part_number = X.part_number)) AS negatives
FROM work_orders A
ORDER BY A.assembly ASC

Я пытаюсь выяснить, для заданного рабочего задания, есть ли детали, которых нам не хватает для сборки сборки. В настоящее время я получаю сообщение об ошибке «Корреляция полей». Можно ли выполнить такую ​​операцию в одном запросе?

1 Ответ

0 голосов
/ 10 ноября 2018

Попробуйте переместить подзапрос в объединение, примерно так:

   SELECT a.work_order, a.assembly, a.job_quantity, n.negatives
   FROM work_orders a JOIN (SELECT x.part_number, COUNT(x.part_number) as negatives
                     FROM bom x JOIN work_orders b
                     ON x.assembly = b.assembly
                     WHERE (x.quantity_required * b.job_quantity) >= (SELECT y.quantity_available 
                                                                       FROM inventory y WHERE 
                                                                       y.part_number = x.part_number)
                    GROUP BY x.part_number) n
                    ON a.part_number = n.part_number
                    ORDER BY a.assembly ASC

Или создайте временный курсор с подзапросом и затем используйте его, чтобы присоединиться к основной таблице. Надеюсь, это поможет.

Луис

...