2015-05-13 2 views
0

Мне нужно получить 5 столбцов данных из таблицы в моей базе данных оракула. Перед выполнением запроса пользователь имеет возможность фильтровать (я думаю, это правильное слово) столбцы. Таким образом, пользователь может сказать, что он не суетливый и возвращает все записи, или может сказать только, где столбец содержит определенную запись.Как фильтровать много столбцов в oracle sql

Вещь, с которой я борюсь, состоит в том, что у меня есть 5 столбцов, и это касается каждого столбца. И если пользователь выбирает что-то конкретное для всех 5 столбцов, тогда возвращаемый результат должен иметь только записи, которые содержат эту конкретную вещь для всех 5 столбцов, т. Е. «И» между всеми критериями поиска.

Надеюсь, я достаточно подробно объяснил это.

Вот что я до сих пор и не работает полностью:

select column1, column2, column3, column4, column5 from the_table where 

(not exists (select * from the_table where column1=$P{COLUMN1}) or column1=$P{COLUMN1}) AND 

(not exists (select * from the_table where column2=$P{COLUMN2}) or column2=$P{COLUMN2}) AND 

(not exists (select * from the_table where column3=$P{COLUMN3}) or column3=$P{COLUMN3}) AND 

(not exists (select * from the_table where column4=$P{COLUMN4}) or column4=$P{COLUMN4}) AND 

(not exists (select * from the_table where column5=$P{COLUMN5}) or column5=$P{COLUMN5}) 

ORDER BY column4 DESC 

Параметры $ P {} вводятся пользователем в отчете яшмы.

ответ

1
SELECT column1, column2, column3, column4, column5 from the_table 
WHERE (column1 like CONCAT ($P{column1},'%')) 
AND (column2 like CONCAT ($P{column2},'%')) 
AND (column3 like CONCAT ($P{column3},'%')) 
AND (column4 like CONCAT ($P{column4},'%')) 
AND (column5 like CONCAT ($P{column5},'%')) 
ORDER BY column4 DESC 

это сделал трюк :)

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