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
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
Đơ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
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
.)
CHỌN col1 = MAX (CONVERT (tinyint, ISNULL (col1,0))) ...
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
bạn có thể giải thích câu trả lời này một số? – Forklift