Solución:
Simplemente haz un GROUP BY
, usar MAX()
para devolver T si está disponible, de lo contrario F.
select col_1, max(col_2), max(col_3), max(col_4)
from tablename
group by col_1
Solo como nota al margen (no funciona con Oracle): en PostgreSQL, haría esto:
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 COL_2
para COL_4
son columnas de texto (char
, varchar
, varchar2
, nvarchar
, nvarchar2
) que contiene 'T'
o 'F'
, entonces puedes simplemente tomar el MAX
de ellos, desde 'T' > 'F'
, es decir 'T'
viene después 'F'
en orden léxico.
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
Explicación: La operación locical OR devuelve VERDADERO, si al menos uno de los operandos es VERDADERO. MAX () devuelve "T"
si al menos un valor es "T"
y de lo contrario "F"
.
Nota: Si las columnas booleanas se declararon como
COL_x NUMBER(1) DEFAULT 0 NOT NULL
o cualquier otro tipo numérico, entonces tomaría MAX(ABS(col_x))
, ya que un valor negativo también cuenta como VERDADERO. (Si tiene una interfaz de Access con un ComboBox adjunto a un booleano, produce los valores 0
o -1
.)