2015-09-25 5 views
0

Базовый SQL Я знаю, что нашел обходной путь, но я уверен, что есть лучший способ.Объединение нескольких строк, группирующих несколько значений столбцов

У меня есть таблица, где account_id могут быть назначены два типа сущностей А и В, и я хочу, чтобы сгруппировать их в выходной таблице:

Таблица A:

+------------+--------+--------+ 
| account_id | A | B | 
+------------+--------+--------+ 
| 68129726 | Mario | null | 
| 68129726 | null | Silvio | 
+------------+--------+--------+ 

Таблица вывода:

+------------+--------+--------+ 
| account_id | A | B | 
+------------+--------+--------+ 
| 68129726 | Mario | Silvio | 
+------------+--------+--------+ 

Я уверен, что есть ответ уже, это просто я не KNO w «техническое» имя для этой операции.

Мое решение (более обходной путь действительно):

SELECT DISTINCT account_id, MAX(A), MAX(B) 
FROM TABLE A 
GROUP BY account_id 

Есть лучше, более правильный способ сделать это?

+0

Возможно ли иметь тот же account_id, содержащий два разных имени в объектах A. например. 'account_id -> 68129726 A -> Mario B -> null; account_id -> 68129726 A -> John B -> null; 'etc ... –

ответ

1

«более правильный» способом является явным GROUP BY:

SELECT account_id, MAX(A), MAX(B) 
FROM TABLE A 
GROUP BY account_id; 

Единственной альтернативой я могу думать это присоединиться:

SELECT a.account_id, a.a, b.b 
FROM table a JOIN table b 
ON a.account_id = b.account_id AND a.a IS NULL AND b.b IS NULL; 

Я предпочитаю агрегацию, но при некоторых обстоятельствах , JOIN будет быстрее.

+0

Спасибо @GordonLinoff Я действительно забыл добавить, что :) Это лучший способ? –

+0

@ TheoGonella. , , Без «SELECT DISTINCT», я так думаю. –

+0

Вы имеете в виду, что DISTINCT не должен быть там? Разве я не получил бы таблицу происхождения таким образом? –