Объедините похожие записи с уникальными характеристиками - PullRequest
0 голосов
/ 02 марта 2020

У меня есть список данных, который выглядит следующим образом:

|key|last  |first  |email    |degree  
|1  |Hope  |Bob    |a@1.com  |BA  
|1  |Hope  |Bob    |a@2.com  |MA  
|1  |Hope  |Bob    |a@1.com  |PhD  
|2  |Pane  |Pat    |b@1.com  |BA  
|2  |Pane  |Pat    |b@2.com  |MD 

Мне нужно объединить эти данные, чтобы показать несколько вариантов одного и того же поля, чтобы они выглядели так, чтобы был первичный ключ:

|key  |last  |first  |email1   |email2   |degree1  |degree2  |degree3    
|1    |Hope  |Bob    |a@1.com  |a@2.com  |BA  |MA  |  PhD   
|2    |Pane  |Pat    |b@1.com  |b@2.com  |BA  |MD  |  Null

Столбцы должны будут «генерироваться» по мере необходимости. например, если бы была только 1 запись с 19 электронными письмами, она генерировала бы 19 столбцов электронных писем, даже если у остальных было только максимум 2.

Я пытался самостоятельно объединяться, чтобы сложить и сложить позже с этим:

SELECT a.key,a.last, a. first, a.email, a.degree 
b.key, b.last, b.first, b.email, b.degree 
FROM a 
LEFT JOIN b 
ON a.key = b.key and a.email=b.email and a.degree=b.degree

Но я застрял. Это не присоединилось правильно. И это был первый шаг. Я спрашиваю здесь, чтобы увидеть, если я даже на правильном пути. Разве это не должно сочетаться только с тем, что совпадает с левой таблицей? Это закончилось копированием записей. Внутреннее объединение удалит записи только с 1 электронным письмом или отделом. Просто ищу способ сделать это.

Вид застрял.

1 Ответ

0 голосов
/ 03 марта 2020

Столбцы нужно будет «генерировать» по мере необходимости. Например, если бы была только 1 запись с 19 электронными письмами, она сгенерировала бы 19 почтовых столбцов, даже если у остальных было только максимум 2.

- проблема, потому что sql возвращает фиксированное число колонн.

Пример самостоятельного соединения возвратил все строки, потому что предложение on сопоставляет строки в a со строками в b. Один к одному.

Агрегирующая функция group_concat () может приблизить вас в зависимости от того, как вы собираетесь использовать результат. Этот запрос:

select key,first,last,group_concat(email) email_list,group_concat(degree) degree_list
from table
group by key

Возвращает этот результат:

key         first       last        email_list               degree_list
----------  ----------  ----------  -----------------------  -----------
1           Bob         Hope        a@1.com,a@2.com,a@1.com  BA,MA,PhD
2           Pat         Pane        b@1.com,b@2.com          BA,MD
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...