2016-11-11 86 views
0

我目前正在使用我的報告參數列表中的值,它依賴於另一個參數。 我已經想出了這個想法,有沒有什麼可能的方式來使這個工作?我可以在SQL中使用動態FROM子句嗎?

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

您正在使用哪種RDBMS? – Kacper

+2

無需做SELECT DISTINCT,因爲UNION無論如何都會刪除重複項。 – jarlh

+0

@Kacper我正在使用Oracle SQL –

回答

0

假設這是Oracle SQL,可以使用EXISTS函數檢查參數值,然後使用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

非常感謝很多人,我會盡量儘快使用它。我會繼續努力,我會給你一個更新 –

相關問題