Функция или часть запроса

S_Gur

Premium
Регистрация
26 Фев 2007
Сообщения
65
Реакции
10
Credits
1,083
Доброго времени суток. Задача вкратце такая. Есть некий список клиентов. Каждый месяц у этого клиента может быть 0, 1 или несколько неких услуг. Нужно сделать отчет за 12 месяцев, в котором будет имя клиента и список этих услуг в строку - с использованием функции Group_Concat. Запрос на список этих услуг на каждого клиента на заданный месяц тоже не простой - из двух таблиц. Отсюда вопрос: как оптимальнее будет организовать представление - обычный селект (соответственно, с подключением 12 раз по две этих таблицы в секцию From), вложенные запросы на каждый месяц или функция, которая принимает в качестве параметра клиента и месяц и возвращает строку услуг через какой-то сепаратор
 
Последнее редактирование:

exy

Турист
Регистрация
5 Окт 2021
Сообщения
1
Реакции
0
Credits
12
something like this would work

select client , max(jan_Report) jan_report, max(feb_report) feb_report... form
(

SELECT CLIENT,
(CASE Month WHEN 1 THEN service ELSE 0 END) Jan_Report,
(CASE Month WHEN 2 THEN service ELSE 0 END) Feb_Report,
....
(CASE Month WHEN 11 THEN service ELSE 0 END) Nov_Report,
(CASE Month WHEN 12 THEN service ELSE 0 END) Dec_Report
from clientTable c
join ServiceTable s on c.client_id = s.client_id
....
) client_temp
group by client
 

S_Gur

Premium
Регистрация
26 Фев 2007
Сообщения
65
Реакции
10
Credits
1,083
something like this would work

select client , max(jan_Report) jan_report, max(feb_report) feb_report... form
(

SELECT CLIENT,
(CASE Month WHEN 1 THEN service ELSE 0 END) Jan_Report,
(CASE Month WHEN 2 THEN service ELSE 0 END) Feb_Report,
....
(CASE Month WHEN 11 THEN service ELSE 0 END) Nov_Report,
(CASE Month WHEN 12 THEN service ELSE 0 END) Dec_Report
from clientTable c
join ServiceTable s on c.client_id = s.client_id
....
) client_temp
group by client
Оно будет работать во всех трех перечисленных мной вариантах. Меня интересует исключительно производительность. Представление там гораздо сложнее, сейчас (пока без этих дополнительных 12 рассчитываемых полей) годовой отчет открывается секунды за 4. Боюсь завесить систему напрочь. В таком виде, как написали вы, это, к сожалению, работать не будет - мне нужны данные с привязкой к клиенту. Лично мне, с точки зрения удобства, была бы предпочтительней функция, но пока не могу найти информацию о том, насколько она оптимальнее (или, наоборот, неоптимальнее) по сравнению, например, со вложенными запросами
 

Похожие темы