2016-06-21 70 views
9

我怎么能聚集一些元组这样如何聚合布尔列

COL_1 | COL_2 | COL_3 | COL_4 
val | T | F | F 
val | F | T | F 

与OR功能,如下表返回?

COL_1 | COL_2 | COL_3 | COL_4 
val | T | T | F 

回答

12

只需做一个GROUP BY,使用MAX()如果有返回T,否则F.

select col_1, max(col_2), max(col_3), max(col_4) 
from tablename 
group by col_1 
2

如果COL_2COL_4是文本列(charvarcharvarchar2nvarcharnvarchar2)含'T''F',那么你可以采取MAX其中,因为'T' > 'F',即'T'后来r按照词汇顺序编号为'F'

SELECT COL_1, MAX(COL_2) AS COL_2, MAX(COL_3) AS COL_3, MAX(COL_4) AS COL_4 
FROM table 
GROUP BY COL_1 

说明:如果至少有一个操作数为TRUE,则LOC返回TRUE。如果至少有一个值为"T",否则MAX()返回"T",否则返回"F"


注:如果布尔列被声明为

COL_x NUMBER(1) DEFAULT 0 NOT NULL 

或任何其他数字类型,那么我将采取MAX(ABS(col_x)),因为负值算作也是如此。 (如果你有一个连接到布尔组合框的访问前端,它产生的价值0-1。)

0

SELECT COL1 = MAX(CONVERT(TINYINT,ISNULL(col1,0)))...

+1

你能解释一下这个回答一些? – Forklift

1

正如一个侧面说明(不用于Oracle):在PostgreSQL,你可以这样做:

select col_1, bool_or(col_2), bool_or(col_3), bool_or(col_4) 
from tablename group by col_1 order by col_1