Динамически исключить некоторые поля из выбора, используя EXCEPT - PullRequest
0 голосов
/ 07 мая 2020

Мы ищем способ динамически исключать некоторые столбцы из набора результатов, мы пробовали использовать выражение case, но EXCEPT это не нравится:

DECLARE hide_city  bool default true;
select * EXCEPT(case when hide_city then city end) from table

Вы знаете, как добиться этот? или другими способами?

1 Ответ

2 голосов
/ 07 мая 2020

Я знаю, вы, скорее всего, ожидаете чего-то более сексуального, но я думаю, что это пока единственный вариант

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 ...;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...