2016-06-21 27 views
9

Làm thế nào tôi có thể tổng hợp một số các bộ như thế nàyLàm thế nào để tổng hợp cột boolean

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

với OR chức năng và trả lại bảng sau?

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

Trả lời

12

Đơn giản chỉ cần làm một GROUP BY, sử dụng MAX() trở về T nếu có, khác F.

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

Nếu COL_2-COL_4 cột văn bản (char, varchar, varchar2, nvarchar, nvarchar2) chứa 'T' hoặc 'F', sau đó bạn chỉ có thể lấy số MAX trong số đó, kể từ 'T' > 'F', tức là 'T' đến sau r 'F' theo thứ tự từ vựng.

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 

Giải thích: Vận hành cục bộ HOẶC trả về TRUE, nếu ít nhất một toán hạng là TRUE. MAX() trả về "T" nếu ít nhất một giá trị là "T" và nếu không "F".


Lưu ý: Nếu các cột Boolean được khai báo là

COL_x NUMBER(1) DEFAULT 0 NOT NULL 

hoặc bất kỳ loại số khác thì tôi sẽ mất MAX(ABS(col_x)), vì một giá trị âm đếm như TRUE là tốt. (Nếu bạn có một lối vào Access với một ComboBox gắn liền với một Boolean, nó mang lại những giá trị 0 hoặc -1.)

0

CHỌN col1 = MAX (CONVERT (tinyint, ISNULL (col1,0))) ...

+1

bạn có thể giải thích câu trả lời này một số? – Forklift

1

cũng giống như một mặt lưu ý (không làm việc với Oracle): Trong PostgreSQL, bạn sẽ làm điều này:

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 
Các vấn đề liên quan