Как написать select в PL/SQL через переменную для отчета используя case?
ниже запрос для отчета в котором нужно сравнить возвращенные данные в столбцах dat_prev, dat_cur. B запросе использую переменные :v_datn1,:v_datk1,:v_datn2,:v_datk2 для того, чтобы прописать период.
(case when to_date(f.dat) between to_date(:v_datn1) and to_date(:v_datk1) then f.voda_k else 0 end ) dat_prev,
(case when to_date(f.dat) between to_date(:v_datn2) and to_date(:v_datk2) then f.voda_k else 0 end ) dat_cur
from rv_potreb_obj l
left join wv_nach_fino f on (l.tip=f.tip);
Проблема заключается в том, что case не фильтрует по условию, то есть какой период в переменных я бы не прописала, он мне возвращает все данные за все время. Если использовать условие where, то каким образом прописать и как тогда в этом случае использовать case? Прошу различные варианты описать, не судить строго - набираюсь опыта
а как прописать с "where" если нельзя никак описать его в between, т.е.:
where dat_prev between to_date('01.01.2010') and to_date('31.12.2010') and dat_cur between to_date('01.01.2011') and to_date('31.12.2011') ???
ведь dat_cur и dat_prev заданные, а не исходные столбцы????
А что мешает фильтровать по полю f.dat?
И ещё замечание, постоянное использование to_date() означает, что вы неверно выбрали формат хранения данных. Для дат есть отдельный тип DATE. А в текущем варианте у вас постоянно будут медленные запросы без использования индексов - по функциям индексы не работают.
Aeesha, Если ваши date_prev и date_cur являются функциями, зависящими от поля f.dat, а фильтр - функция, зависящая от date_prev и date_cur, то ничто не мешает выразить функцию фильтра сразу от f.dat.