2012-03-01 3 views
1

представить себе таблицу, которая выглядит, как этотOracle/SQL - Объединение записей на KEYFIELD

CUST FLAG1 FLAG2 
--------------------- 
1234 1  0 
1234 1  1 
1234 1  0 
1234 0  1 
5678 1  0 
5678 1  0 
9012 0  1 

То, что я хочу сделать, это группа полем П и объединить флаги (которые булевы в природе), так что я бы получите следующий результат:

CUST FLAG1 FLAG2 
--------------------- 
1234 1  1 
5678 1  0 
9012 0  1 

Может ли кто-нибудь помочь мне с этим?

ответ

5

Предполагая, что «объединить флаги» означает «ИЛИ флаги вместе», так что если строка имеет 1 конечный результат имеет 1, вобще GROUP BY с MAX

SELECT cust, 
     MAX(flag1) flag1, 
     MAX(flag2) flag2 
    FROM table_name 
GROUP BY cust 
+0

UGH - в тиснении, делающем слишком много других вещей, которые я усложнил этому в своей голове. Благодаря; это было прекрасно! – dscl

1

Вы можете использовать сочетание SUM и SIGN.

SQL> SELECT cust 
    2 ,  SIGN(SUM(flag1)) flag1 
    3 ,  SIGN(SUM(flag2)) flag2 
    4 FROM  t 
    5 GROUP BY cust 
    6 ORDER BY cust 
    7 ; 

CUST  FLAG1  FLAG2 
---- ---------- ---------- 
1234   1   1 
5678   1   0 
9012   0   1 
9999   0   0 

SQL> 
+0

+1 - интересный подход. –

Смежные вопросы