我们正在寻找一种从结果集中动态排除某些列的方法,我们尝试使用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 ...;