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
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
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
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
.)
SELEZIONA col1 = MAX (convert (tinyint, ISNULL (col1,0))) ...
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
si può spiegare questa risposta un po '? – Forklift