我们正在寻找一种从结果集中动态排除某些列的方法,我们尝试使用 case 表达式,但 EXCEPT 不喜欢它:
DECLARE hide_city bool default true;
select * EXCEPT(case when hide_city then city end) from table
你知道实现这一目标的方法吗?或其他一些方式?
我们正在寻找一种从结果集中动态排除某些列的方法,我们尝试使用 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 ...;