Я пытаюсь получить итоговое вычитание для моего столбца avail_relief_amt
.Цель состоит в том, чтобы сделать (qty_filled / qty_total)
максимально близким к 100%, для чего предназначен столбец room_to_improve
.
Текущий запрос:
SELECT
t2_date,
part_no,
issue_group,
level,
p_category,
qty_filled,
qty_total,
relief_amt,
curr_mth_note,
carryover_note,
room_to_improve,
avail_relief_amt,
CASE
WHEN avail_relief_amt != 0 THEN ( qty_total - room_to_improve )
ELSE NULL
END AS new_qty_total
FROM
(
SELECT
t2_date,
part_no,
issue_group,
level,
p_category,
qty_filled,
qty_total,
relief_amt,
curr_mth_note,
carryover_note,
CASE
WHEN qty_filled < qty_total THEN ( qty_total - qty_filled )
ELSE NULL
END AS room_to_improve,
avail_relief_amt
FROM
(
SELECT
t2_date,
part_no,
issue_group,
level,
p_category,
qty_filled,
qty_total,
relief_amt,
curr_mth_note,
carryover_note,
CASE
WHEN curr_mth_note IS NOT NULL THEN relief_amt
ELSE NULL
END AS avail_relief_amt
FROM
(
SELECT
t1.t2_date,
t1.part_no,
t1.issue_group,
t1.level,
t1.p_category,
t1.qty_filled,
t1.qty_total,
mv.relief_amt,
mv.curr_mth_note,
mv.carryover_note
FROM
table_detail_mv mv,
table_part_con t1
WHERE
t1.part_no = mv.part_no
AND t1.t2_date = mv.t2_date
GROUP BY
t1.t2_date,
t1.issue_group,
t1.level,
t1.part_no,
t1.p_category,
t1.qty_filled,
t1.qty_total,
mv.relief_amt,
mv.curr_mth_note,
mv.carryover_note
ORDER BY
t1.t2_date,
t1.issue_group,
t1.level DESC
)
)
)
ORDER BY
t2_date,
part_no,
issue_group,
level DESC
Токовый выход:
Столбец avail_relief_amt
начинается с любого числа в столбце relief_amt
.Если avail_relief_amt > room_to_improve
, следующий avail_relief_amt
должен быть тем, что осталось от (avail_relief_amt - room_to_improve)
.В моем выводе выше, поскольку для строки 2 нет room_to_improve
, поэтому необходимо перейти к следующему ряду и т. Д. До avail_relief_amt = 0
.
Требуемый выход:
Редактировать
Iя удалил столбцы room_to_improve
, avail_relief_amt
и new_qty_total
из моего запроса, так как они были добавлены в мыслях о том, чтобы помочь визуализировать мою конечную цель.
Токовый выход (без вышеуказанных столбцов):
Лучшее объяснение конечной цели:
- Получение
qty_total
/ qty_filled
как можно ближе к 100%, путем взятия от relief_amt
до тех пор, пока оно не станет равным 0. relief_amt
опустится вниз по приоритетной линии (игнорируя опоздание).Порядок приоритета: (issue_group='1', s_level='80'
) - (issue_group='1', s_level='100'
) - (issue_group='2/3 ', s_level='80'
) - (issue_group='2/3 ', s_level='100'
) - . С указанным выше выводом необходимо 27, чтобы сделать
qty_total = qty_filled
,так что это число взято из relief_amt
(из 57).Оставляя relief_amt=30
. - Затем запрос переходит к следующему приоритету, но, поскольку 94 = 94, нет необходимости использовать
relief_amt
, поэтому он переходит к следующей строке (не обращая внимания на пропуск«Поздний»). - Теперь нам нужно получить
qty_total=226
, ближе к qty_filled=125
, но у нас есть только relief_amt=30
.Таким образом, оставшиеся relief_amt
взяты из этого qty_total=226
, что делает этот новый qty_total=196
, и тогда у нас кончается relief_amt
.
Это очень запутанно, я знаю, и меня имои коллеги довольно озадачены из-за всех переменных и повторяющихся уравнений.
Любая помощь будет отличной!