Oracle / SQL - объединение записей по ключевому полю - PullRequest
1 голос
/ 01 марта 2012

представьте себе таблицу, которая выглядит следующим образом

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 и объединить флаги (которые имеют логический характер), чтобы я получил следующий результат

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

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

Ответы [ 2 ]

5 голосов
/ 01 марта 2012

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

SELECT cust,
       MAX(flag1) flag1, 
       MAX(flag2) flag2
  FROM table_name
 GROUP BY cust
1 голос
/ 01 марта 2012

Вы можете использовать комбинацию 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...