Формирование оператора Oracle SQL WHERE для включения всех результатов при вводе «ALL» или только по введенным критериям - PullRequest
0 голосов
/ 17 октября 2019

Заранее благодарю за любую помощь!

У меня возникают трудности с написанием заявления о местоположении для создаваемого мной отчета по SSRS. Я хотел бы, например, иметь параметр «Сайты», но позволить пользователю либо вводить конкретные номера сайтов (которые могут включать буквы), либо вводить «ВСЕ», чтобы просто вернуть все результаты.

Я попробовал:

((Case 
  WHEN (Upper(:Site) = 'ALL') THEN ('1')
  WHEN ((Upper(:Site) != 'ALL') 
  AND (SITE_NUMBER IN Upper(:Site))) THEN '1'
  ELSE '0' 
  END) = '1')

и

  ((Case 
  WHEN LENGTH(:Site) = 3 THEN ('1')
  WHEN (LENGTH(:Site) <> 3 
  AND (SITE_NUMBER IN (:Site))) THEN '1'
  ELSE '0' 
  END) = '1')

(проблема со вторым заключается в том, что иногда мое значение может быть 3 цифры)

Я обнаружил, что оба они работают, пока я не введу несколько значений для: Сайт. Если я это сделаю, я получу ORA-00909: недопустимое количество аргументов.

Обычно я просто делаю квалификатор NVL, но SSRS не позволяет параметру разрешать как несколько значений, так и значения NULL.

Я также думал о том, чтобы просто сделать выражение видимости строки в своем отчете, но мне нужно сделать это для примерно 10 параметров, поэтому я не думаю, что это выполнимый вариант.

Еще раз спасибо за любые мысли, которые вы можетеесть!

Ответы [ 2 ]

0 голосов
/ 17 октября 2019

Вам нужно попробовать следующее WHERE предложение:

CASE
        WHEN UPPER(':Site') = 'ALL' THEN '1'
        WHEN SITE_NUMBER IN (
            SELECT
                REGEXP_SUBSTR('Site', '[^,]+', 1, LEVEL)
            FROM
                DUAL
            CONNECT BY
                REGEXP_SUBSTR('Site', '[^,]+', 1, LEVEL) IS NOT NULL
        ) THEN '1'
        ELSE '0'
    END = '1'

Cheers !!

0 голосов
/ 17 октября 2019

Как насчет простого логического выражения?

where (upper(:Site) = 'ALL' or site_number = upper(:site))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...