2016-08-19 6 views
2

Следующий запрос дает мне две строки для одного ученика, потому что для ученика есть два контакта. Однако я хотел бы иметь возможность отображать оба контакта в одной строке.Объедините два ряда в один

Я был бы очень признателен, если бы кто-то помог мне.

Запрос

select student.code as "student code", student.firstname, student.surname, student.birth_date, contact.firstname as "contact firtname", contact.surname as "contact surname" 
from 
student 
join "studentContact" on student.id = "studentContact".student 
join contact on "studentContact".contact = contact.id 

Выход

student code firstname surname birthdate contact firstname contact surname 
1234   John  Doe 19/09/2000 Jane    Doe 
1234   John  Doe 19/09/2000 Harry    Doe 

ответ

3

Вы можете использовать string_agg функцию. Что-то вроде этого:

select student.code as "student code", student.firstname, student.surname, student.birth_date, string_agg(concat(contact.firstname, ' ', contact.surname), ', ') as "contacts" 
from 
student 
join "studentContact" on student.id = "studentContact".student 
join contact on "studentContact".contact = contact.id 
group by student.id 
+0

Это предполагает, что 'id' является первичным ключом таблицы' student'. Скорее всего, это допустимое предположение, учитывая условия соединения, но стоит упомянуть. – Patrick

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