sql: как выбрать строку с истинным значением из столбца логических значений после предложения HAVING - PullRequest
1 голос
/ 18 апреля 2011

HI имеет 3 таблицы продуктов, в каждой из которых 3 столбца, а именно имя клиента, логическое отключение и черный список. После предложения Имеется 3 строки для каждого имени клиента (при условии, что у него есть все 3 продукта).

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

SELECT customer_name,
       cast(int4(sum(cast(optout     As int4))) As Boolean) As optout, 
       cast(int4(sum(cast(blacklist  As int4))) As Boolean) As blacklist
FROM
(SELECT * FROM product1
UNION SELECT * FROM product2
UNION SELECT * FROM product3) AS temp1
GROUP BY customer_name, optout, blacklist
HAVING optout=true or blacklist=true;

Ответы [ 2 ]

3 голосов
/ 18 апреля 2011

Попробуйте агрегатную функцию bool_or, звучит точно так, как вы ищете:

SELECT customer_name,
       bool_or(optout)    As optout,
       bool_or(blacklist) As blacklist
FROM
(SELECT * FROM product1
UNION SELECT * FROM product2
UNION SELECT * FROM product3) AS temp1
GROUP BY customer_name, optout, blacklist
HAVING optout=true or blacklist=true;
0 голосов
/ 18 апреля 2011

Если я правильно понял вопрос, думаю, вам просто нужен оператор CASE в SELECT, например,

CASE
WHEN blackLIST = TRUE OR optout = TRUE THEN 1
ELSE 0
END
...