Несколько операторов выбора в IF - PullRequest
0 голосов
/ 12 ноября 2009

Я мог бы использовать некоторую помощь, чтобы написать конструкцию prog./sql для отчета.

Sql должен сначала проверить запрос, а затем решить, какие операторы "select" должны выполняться

что-то вроде (псевдокод)

Select ACCT,LOC FROM (

   IF :loc = 'MN' THEN
      Select acc as ACCT,location as LOC
   ELSE IF :loc = 'MA' THEN
      Select accid as ACCT,locid as LOC
   ELSE IF :loc = 'PA' THEN 
      Select accountid as ACCT,location as LOC
   END IF)

вышеописанное не работает. Пожалуйста, помогите!

Ответы [ 3 ]

2 голосов
/ 12 ноября 2009

Как насчет ...

select acc,
       case :loc
       When 'MN' then location
       When 'MA' then locid
       When 'PA' then location
       ...
       end
from   ...

или ...

select acc,
       case when :loc in ('MN','PA')
            then location
            When :loc in ('MA',...)
            then locid
            ...
       end
from   ...

Было бы удобнее сделать это, потому что это уменьшает количество уникальных курсоров.

2 голосов
/ 12 ноября 2009

Вы можете сделать это:

Select acc as ACCT,location as LOC 
where :loc = 'MN' 
UNION ALL
Select accid as ACCT,locid as LOC 
where :loc = 'MA' 
UNION ALL
Select accountid as ACCT,location as LOC 
where :loc = 'PA';
1 голос
/ 12 ноября 2009

Если вы можете создавать пользовательские функции PL / SQL, вы можете вернуть набор результатов из него (так называемая таблица записей), а затем просто выбрать из функции. См. эту статью .

...