我们正在寻找一种方法来动态地从结果集中排除一些列,我们尝试使用case表达式,但EXCEPT不喜欢它。
DECLARE hide_city bool default true;
select * EXCEPT(case when hide_city then city end) from table
你知道有什么方法可以实现吗?
我知道,你很可能期待更性感的东西,但我觉得这是目前唯一的选择。
DECLARE hide_city bool DEFAULT TRUE;
IF hide_city THEN
SELECT * EXCEPT(city) FROM table;
ELSE
SELECT * FROM table;
END IF;
如何与前面的CTE结合?
可以像下面这样--这样你就可以把你的CTE "转化 "成TEMP表。
DECLARE hide_city bool DEFAULT TRUE;
CREATE TEMP TABLE myTable AS
WITH myCTE AS (
SELECT ... UNION ALL
SELECT ... UNION ALL
...
SELECT ...
)
SELECT * FROM myCTE;
IF hide_city THEN
SELECT * EXCEPT(city) FROM myTable;
ELSE
SELECT * FROM myTable;
END IF;
很明显,你根本不需要CTE,而是可以做到
CREATE TEMP TABLE myTable AS
SELECT ... UNION ALL
SELECT ... UNION ALL
...
SELECT ...;