Умножает операторы where на предложение с различными значениями в Sql, используя JPA - PullRequest
0 голосов
/ 23 октября 2018

Привет, ребята. Я делаю нативный запрос для своего проекта с использованием JPA, но я не знаю, как я могу сделать тип if и else в предложении where, мой? 0 может быть 4 значения: 10,20, 30 и 40, когда? 0 - 10, 20, 30 Я должен использовать CI.QTD <=, а когда? 0 - 40, условие должно быть> =.Как я могу это сделать?

Следуйте моему коду с одним условием:

SELECT rownum AS id, 
       x.* 
FROM   ( 
                SELECT   ci.text, 
                         ci.lenght 
                FROM     ci_table CI

                WHERE    (?0 IS NULL OR ci.qtd <= ?0) 

                GROUP BY ci.text, 
                         ci.lenght 
                ORDER BY ci.text) x , 
       nativequery = true);

ДОБАВИТЬ ЗАПРОС ПОСЛЕ РЕГУЛИРОВКИ:

@Query(value =
            "SELECT rownum as ID, X.* FROM (SELECT " +
                    " CI.PARAM1  " +
                    " CI.PARAM2,  " +
                    " CI.PARAM3,         " +
                    " CI.PARAM4, " +
                    " CI.PARAM5" +
                    " FROM    " +
                    " CM_PARAMS CI " +
                    " WHERE  " +
                    " (?1 is null or CI.PARAM6 = ?1) " +
                    " AND (?2 is null or CI.PARAM7 = ?2) " +
                    " AND (?3 is null or CI.PARAM8 = ?3) " +
                    " AND (?4 is null or CI.PARAM9 = ?4) " +
                    " AND (?5 is null or CI.PARAM10 = ?5) " +
                    " AND (?6 is null or CI.PARAM11 = ?6) " +
                    " AND (?7 is null or CI.PARAM12 = ?7) " +
                    " AND (?8 is null or CI.PARAM13 = ?8) " +
                    " AND (CASE WHEN ?9 >30 THEN CI.PARAM14 > 30  " +
                    "  CASE WHEN ?9 <31 THEN CI.PARAM15 <= ?9 END) = 1 " +
                    " GROUP BY " +
                    " CI.PARAM1,  " +
                    " CI.PARAM2,  " +
                    " CI.PARAM3,         " +
                    " CI.PARAM4, " +
                    " CI.PARAM5" +
                    " ORDER BY  " +
                    " CI.PARAM1 ASC) X " , nativeQuery = true)

1 Ответ

0 голосов
/ 23 октября 2018

Попробуйте:

SELECT rownum AS id, 
       x.* 
FROM   ( 
                SELECT   ci.text, 
                         ci.lenght
                FROM     ci_table CI

                WHERE (CASE WHEN ?0 IN (10,20,30) THEN CI.QTD <= ?0
                      WHEN ?0 = 40 THEN CI.QTD > ?0 END) = 1

                GROUP BY ci.text, 
                         ci.lenght 
                ORDER BY ci.text) x , 
       nativequery = true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...