Я пытаюсь создать отчет для клиента, который соответствует определенному диапазону дат, в котором они нуждаются в настоящее время, но у меня есть пара проблем.
Самый большой из них,Как я могу получить мои пользовательские запросы на ввод Enter_Start_Date
и Enter_End_Date
только один раз?(то есть Начало: 01 января 18 и Конец 28 февраля 18).Я попытался исследовать другие вопросы здесь, и было предложение (которое сработало для этого пользователя) сделать && с тем же именем переменной перед дополнительными вхождениями, но когда я запускаю запрос, мне все равно предлагается 4 раза.
Другая проблема, с которой я столкнулся, заключается в том, что приведенный ниже запрос не возвращает результаты для parts_used
и h_repairs
, как это должно быть.
SELECT
a.h_desc,
a.fic,
a.p_part,
a.d_part,
a.nomenclature,
a.qpe,
SUM(b.qty) AS parts_used,
COUNT(c.fic) AS h_repairs,
a.cdf_ohb,
a.bmc
FROM
t_table_a a
LEFT JOIN t_table_b b ON b.fic = a.fic
AND b.part_no = a.d_part
AND b.real_f_date BETWEEN TO_DATE('&Enter_Start_Date', 'DD-MON-YY') AND TO_DATE('&Enter_End_Date'
, 'DD-MON-YY')
LEFT JOIN t_table_c c ON c.fic = a.fic
AND c.real_f_date BETWEEN TO_DATE('&&Enter_Start_Date', 'DD-MON-YY') AND TO_DATE('&&Enter_End_Date',
'DD-MON-YY')
GROUP BY
a.bmc,
a.cdf_ohb,
a.d_part,
a.fic,
a.h_desc,
a.nomenclature,
a.p_part,
a.qpe
ORDER BY
a.fic,
a.p_part
Когда я выполняю приведенный выше запрос, столбцы parts_used
и h_repairs
полностью не в порядке, но когда я вкладываю объединения, как в приведенном ниже запросе, результаты заполняются, как и ожидалось.
SELECT
t.h_desc,
t.fic,
t.p_part,
t.d_part,
t.nomenclature,
t.qpe,
COUNT(c.fic) AS h_repairs,
t.parts_used,
t.cdf_ohb,
t.bmc
FROM
(
SELECT
a.h_desc,
a.fic,
a.p_part,
a.d_part,
a.nomenclature,
a.qpe,
SUM(b.qty) AS parts_used,
a.cdf_ohb,
a.bmc
FROM
t_table_a a
LEFT JOIN t_table_b b ON b.fic = a.fic
AND b.part_no = a.d_part
AND b.real_f_date BETWEEN TO_DATE('&Enter_Start_Date', 'DD-MON-YY') AND TO_DATE('&Enter_End_Date'
, 'DD-MON-YY')
GROUP BY
a.bmc,
a.cdf_ohb,
a.d_part,
a.fic,
a.h_desc,
a.nomenclature,
a.p_part,
a.qpe
) t
LEFT JOIN t_table_c c ON c.fic = t.fic
AND c.real_f_date BETWEEN TO_DATE('&&Enter_Start_Date', 'DD-MON-YY') AND TO_DATE('&&Enter_End_Date',
'DD-MON-YY')
GROUP BY
t.h_desc,
t.fic,
t.p_part,
t.d_part,
t.nomenclature,
t.qpe,
t.parts_used,
t.cdf_ohb,
t.bmc
ORDER BY
t.fic,
t.p_part
Является ли вложение соединений тем, что должно произойти, или я что-то делаю немного неправильно?