我可以在 SQL 中使用动态 FROM 子句吗?

Can I have dynamic FROM Clause in 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;

假设这是 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',它将 return 两个不同的行集。

我相信这可以再次优化,希望它对你有用。