2014-09-01 5 views
0

У меня есть текстовое поле, которое пользователи ставят в год, например, :the_SCHEME_YEAR. Затем пользователь получает данные за этот год. Однако, когда пользователь оставляет пустое поле текста, я хочу вернуть все годы назад.Возвращайте все данные, когда переменная связывания в WHERE равна NULL

Это код, который я разработал, но не могу получить все годы назад, когда :the_SCHEME_YEAR, оставлен пустым клиентом.

AND the_year in NVL(:the_SCHEME_YEAR, to_char('2005,'||'2006,'||'2007')) 

Любые советы были бы полезны.

SELECT the_year 
    , ent_type 
    , SUM (a.no_of_parts) number_ents 
    , SUM (ent_value * a.no_of_ents) value_ents 
    FROM TEST_REGISTER A 
WHERE the_year > 2004 and the_year <= the_max_year 
    AND ent_type is not null 
    AND the_year in NVL(:the_SCHEME_YEAR, to_char('2005,'||'2006,'||'2007')) 
GROUP BY the_year, ent_type 
ORDER BY 1 

ответ

0

Попробуйте это:

AND ( (:the_SCHEME_YEAR is null and the_year in (2005, 2006, 2007)) 
    OR the_year = :the_SCHEME_YEAR 
    ) 

(Обратите внимание, что оператор SQL in требует списка значений, а не каскадная строки из них.)

+0

Возьмите лук Тони. Я был с радиоприемниками, LOVs и знал, что должен быть какой-то SQL, код которого выполняет эту работу. Большое спасибо. –

Смежные вопросы