Я знаю, вы, скорее всего, ожидаете чего-то более сексуального, но я думаю, что это пока единственный вариант
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 ...;