2016-06-21 28 views
9

Come posso aggregare alcune tuple come questocome aggregare colonna booleana

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

con la funzione OR e riportare la seguente tabella?

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

risposta

12

semplicemente fare un GROUP BY, utilizzare MAX() per tornare T, se disponibile, altrimenti F.

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

Se COL_2 a COL_4 colonne sono di testo (char, varchar, varchar2, nvarchar, nvarchar2) contenente 'T' oppure 'F', quindi è sufficiente prendere lo MAX di essi, dal 'T' > 'F', ovvero 'T' viene fornito r 'F' in ordine lessicale.

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 

Spiegazione: L'operazione locical OR restituisce TRUE, se almeno uno degli operandi è TRUE. MAX() restituisce "T" se almeno un valore è "T" e altrimenti "F".


Nota: Se le colonne booleane sono stati dichiarati

COL_x NUMBER(1) DEFAULT 0 NOT NULL 

o di qualsiasi altro tipo numerico quindi vorrei prendere MAX(ABS(col_x)), dal momento che un valore negativo conta come vero. (Se si dispone di un frontend Access con un ComboBox collegato a un valore booleano, esso produce i valori o 0-1.)

0

SELEZIONA col1 = MAX (convert (tinyint, ISNULL (col1,0))) ...

+1

si può spiegare questa risposta un po '? – Forklift

1

Proprio come una nota a margine (non funziona con Oracle): In PostgreSQL, si dovrebbe fare questo:

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 
Problemi correlati