2016-06-21 9 views
9

Jak mogę zsumować kilka krotki jak tenJak agregować logiczną kolumny

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

z OR funkcji i powrócić poniższą tabelę?

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

Odpowiedz

12

Wystarczy zrobić GROUP BY użyć MAX() powrócić T jeśli są dostępne, innego F.

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

Jeśli COL_2 do COL_4 są kolumny tekstowe (char, varchar, varchar2, nvarchar, nvarchar2) zawierającego 'T' lub 'F', następnie można po prostu wziąć MAX z nich, ponieważ 'T' > 'F', czyli 'T' przychodzi po r 'F' w porządku leksykalnym.

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 

Objaśnienie: locical działanie lub zwraca PRAWDA, jeżeli co najmniej jeden z argumentów jest spełniony. MAX() zwraca "T", jeśli przynajmniej jedna wartość to "T", a poza tym "F".


Uwaga: Jeśli logiczne kolumny zostały zadeklarowane jako

COL_x NUMBER(1) DEFAULT 0 NOT NULL 

lub innego typu liczbowego wtedy wziąłbym MAX(ABS(col_x)), ponieważ wartość ujemną liczy się jako PRAWDA, jak również. (Jeśli masz frontend Access z ComboBox dołączony do Boolean, to daje wartości 0 lub -1.)

0

SELECT col1 = MAX (CONVERT (tinyint, ISNULL (col1,0))) ...

+1

można wyjaśnić tę odpowiedź trochę? – Forklift

1

Podobnie jak marginesie (nie działa z Oracle): W PostgreSQL, by to zrobić:

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 
Powiązane problemy