2016-11-11 4 views
0

В настоящее время я работаю с параметром моего отчета список значений, который зависит от другого параметра. Я придумал эту идею, есть ли какой-нибудь возможный способ для этого?Могу ли я иметь динамическое предложение FROM в SQL?

WITH A AS (
SELECT DISTINCT columnA1 FROM Table1 
UNION SELECT DISTINCT columnA2 FROM Table1 
UNION SELECT DISTINCT columnA3 FROM Table1) 

WITH B AS (SELECT DISTINCT columnB1 FROM Table1 
UNION SELECT DISTINCT columnB2 FROM Table1 
UNION SELECT DISTINCT columnB3 FROM Table1) 

Select * from CASE WHEN (:PM_Parameter1 = 'A') 
THEN A 
ELSE B 
END; 
+2

Какие СУБД вы используете? – Kacper

+2

Не нужно делать SELECT DISTINCT, так как UNION удалит дубликаты в любом случае. – jarlh

+0

@Kacper Я использую Oracle SQL –

ответ

0

Предполагая, что это Oracle SQL, вы можете использовать СУЩЕСТВУЕТ функцию для проверки значения параметра, а затем объединить множества с помощью UNION.

Попробуйте играть с этим SQL:

select * from 
(
select 'A' from dual 
union 
select 'B' from dual 
) 
where exists 
    (SELECT 'Y' 
    FROM dual 
    where 'parameter' = 'parameter' 
    ) 
union 
select * from 
(
select 'X' from dual 
union 
select 'Y' from dual 
) 
where exists 
    (SELECT 'Y' 
    FROM dual 
    where 'parameter' != 'parameter' 
    ) 

Если обратить оба условия 'parameter' = 'parameter' и 'parameter' != 'parameter', он будет возвращать два различных набора строк.

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

+0

Помог ли вам этот ответ, @ raven-casero –

+0

спасибо большое, я постараюсь использовать это, как только смогу. Я буду работать над этим, и я дам вам обновление –