Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Прошу помощи в составлении запроса.  [new]
eonae
Member

Откуда:
Сообщений: 17
Уважаемые форумчане!

Я пока ещё начинающий самоучка, поэтому заранее прошу простить за глупые вопросы. У меня их два.

№1. Есть две таблицы (MS SQL Server):

Таблица People (PersonID, FirstName, Surname, DateOfBirth, Role)

и таблица PhoneNumbers (PhoneNumberID, PhoneNumber, PersonID). Поле PersonID - ссылка на таблицу People

Задача состоит в том, чтобы сделать выборку всех полей из таблицы People (кроме ID) и ещё одного поля, в котором соединить через запятую телефонные номера из таблицы PhoneNumbers, относящиеся к данной персоне.

Подскажите пожалуйста, как подступиться к этой задаче. Нарыл что-то про STRING_AGG, но не разобрался, как её здесь применить.

№2. В моём случае одному человеку может соответствовать несколько телефонных номеров. То, что номера хранятся в отдельных таблицах - это не извращение? Сам до другого не додумался, но может быть есть стандартные паттерны для решения подобных проблем?

Заранее огромное спасибо!
С уважением, Сергей.
6 авг 18, 00:11    [21630690]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи в составлении запроса.  [new]
982183
Member

Откуда: VL
Сообщений: 3353
Такие задачи решаются с помощью CONCAT.


Было
21452624
6 авг 18, 02:31    [21630705]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи в составлении запроса.  [new]
982183
Member

Откуда: VL
Сообщений: 3353
А лучше документацию почитай
theory.phphtml.net/sql/group_concat.html
6 авг 18, 09:02    [21630810]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи в составлении запроса.  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
982183
Такие задачи решаются с помощью CONCAT.


Было
21452624

слышал звон да не знает где он

через xml + stuff по той де ссылке и есть
6 авг 18, 09:05    [21630812]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи в составлении запроса.  [new]
982183
Member

Откуда: VL
Сообщений: 3353
Ну так и ссылка потом на документацию GROUP_CONCAT
Пусть человек смотрит на разные подходы.
6 авг 18, 10:53    [21630968]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи в составлении запроса.  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
982183
Ну так и ссылка потом на документацию GROUP_CONCAT
Пусть человек смотрит на разные подходы.

ну тае и нет такой в mssql. STRING_AGG и то только с next
6 авг 18, 11:10    [21630999]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи в составлении запроса.  [new]
982183
Member

Откуда: VL
Сообщений: 3353
Ну да. Это уже мой косяк путанья диалектов.
6 авг 18, 11:30    [21631037]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи в составлении запроса.  [new]
iap
Member

Откуда: Москва
Сообщений: 46981
eonae,

версия сервера какая?
6 авг 18, 11:48    [21631071]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи в составлении запроса.  [new]
eonae
Member

Откуда:
Сообщений: 17
SQL Server 2017

Большое спасибо всем за ответы! Правда не сказать, чтобы я во всём разобрался, но легче определённо стало )))

Если ещё кто-то по архитектуре подскажет - правильно ли я сделал, буду очень благодарен.
6 авг 18, 18:09    [21631948]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи в составлении запроса.  [new]
LameUser
Member

Откуда:
Сообщений: 2028
eonae
SQL Server 2017

Большое спасибо всем за ответы! Правда не сказать, чтобы я во всём разобрался, но легче определённо стало )))

Если ещё кто-то по архитектуре подскажет - правильно ли я сделал, буду очень благодарен.

К сожалению нет под рукой инстанса 2017 чтобы проверить.
Писал согласно пониманию документации (описании функции STRING_AGG), если работает - дайте знать (спортивный интерес)
select
	FirstName,
	Surname,
	DateOfBirth,
	Role,
	STRING_AGG (PhoneNumber, '; ') AS phoneNumbers 
from People p
join PhoneNumbers n on p.PersonID = n.PersonID
group by p.PersonID, FirstName, Surname, DateOfBirth, Role
7 авг 18, 11:50    [21632676]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи в составлении запроса.  [new]
eonae
Member

Откуда:
Сообщений: 17
автор
select
	FirstName,
	Surname,
	DateOfBirth,
	Role,
	STRING_AGG (PhoneNumber, '; ') AS phoneNumbers 
from People p
join PhoneNumbers n on p.PersonID = n.PersonID
group by p.PersonID, FirstName, Surname, DateOfBirth, Role


Запрос работает! Ровно так, как и ожидалось!

Большое спасибо )) Буду повышать скилл в чтении MSDN )
8 авг 18, 10:39    [21633974]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи в составлении запроса.  [new]
eonae
Member

Откуда:
Сообщений: 17
автор
select
	FirstName,
	Surname,
	DateOfBirth,
	Role,
	STRING_AGG (PhoneNumber, '; ') AS phoneNumbers 
from People p
join PhoneNumbers n on p.PersonID = n.PersonID
group by p.PersonID, FirstName, Surname, DateOfBirth, Role


Запрос работает! Ровно так, как и ожидалось!

Большое спасибо )) Буду повышать скилл в чтении MSDN )
8 авг 18, 10:44    [21633981]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить