Как динамически добавлять столбцы к предложению PostgreSQL SQL, где - PullRequest
3 голосов
/ 30 января 2020

У меня есть подзапрос, который вернет 1=1 или ISNULL(optoutflag,'0')=0. Сейчас я пытаюсь использовать это возвращаемое значение в предложении основного запроса where. Если я добавляю напрямую, выдает ошибку типа argument of WHERE must be type Boolean, not type text. Ниже приведен запрос, который я использую.

select * 
from ev_customer_v 
where (
  select * 
  from (select case
                 when a.cnt = '2' then 'ISNULL(optoutflag,\'0\')=\'0\''
                 when a.cnt = '0' then '1=1'
                end as columns
      from (
          select count(*) as cnt  
          FROM information_schema.columns 
          WHERE table_name='ev_customer_v' 
          and column_name in ('optoutflag1','deletedataflag1')
       ) a
   ) b
)

1 Ответ

0 голосов
/ 30 января 2020

Вы можете использовать следующий запрос:

SELECT * 
FROM ev_customer_v 
JOIN (
  SELECT count(*) as cnt  
  FROM information_schema.columns 
  WHERE 
    table_name='ev_customer_v' AND
    column_name IN ('optoutflag1','deletedataflag1')
) a ON (a.cnt = 0 OR COALESCE(optoutflag, 0) = 0);

Объединенная таблица вернет 0 или 2. В случае возврата 0 первое условие соединения a.cnt = 0 будет истинным, и все строки из ev_customer_v будут выбран. В другом случае первое условие соединения будет ложным, а для выбора будет использоваться второе условие COALESCE(optoutflag, 0) = 0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...