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

Откуда: Екатеринбург
Сообщений: 77
Уважаемые коллеги, добрый день!
Прошу строго меня не судить не столь опытный специалист в SQL но стараюсь учиться каждый день в том числе благодаря Вам.
Прошу Вашей помощи в объединении событий. У меня в наличии MS SQL 2008
Написал я запрос такого вида:

select
se_upload_off.CTG_NM as 'Потребитель', se_upload_off.town as 'Населенный пункт',
convert(varchar(10), dateonly, 104) as 'Дата отключения', convert(varchar(5), timeonly, 108) as 'Время отключения',
convert(varchar(10), dateonly2, 104) as 'Дата восстановления', convert(varchar(5), timeonly2, 108) as 'Время восстановления',
convert(varchar(10), dateonly, 4) + ' с '+ cast(timeonly as varchar(5)) +' до ' + cast(timeonly2 as varchar(5))+ ' запланированы ремонтные работы в '+ se_upload_off.town +', 8800250000' as 'Cообщение'
from se_supa_dg, se_upload_off
where
not exists (select se_archive_sms.[Адрес объекта] from dbo.se_archive_sms where dbo.se_archive_sms.[Адрес объекта] = se_upload_off.OBJ_ADDR and convert(varchar(10), dateonly, 104) = se_archive_sms.[Дата отключения] and convert(varchar(5), timeonly, 108) = se_archive_sms.[Время отключения])
and se_upload_off.F_OBJ_ID = se_supa_dg.eso_id
and se_upload_off.OBJ_PO = 'Производственное отделение "Талицкие электрические сети"'
and se_supa_dg.modifyutc >= DATEADD(hour, 8, cast(cast(DATEADD(day, -1, GETDATE()) as date)as datetime))
and cast(dateonly as varchar(10)) > DATEADD(hour, 8, cast(cast(DATEADD(day, +1, GETDATE()) as date)as datetime))
and se_upload_off.phone is not null and se_upload_off.category not like 'ТСО'
and se_upload_off.CTG_NM = 'ООО "Агрофирма "Восточная"'
order by dateonly

Сейчас у меня три строки с одним и тем же "Потребителем" и "Населенным пунктом" но разные "Дата отключения" и "Время отключения".
Мне необходимо в строке "Сообщение" объединить все события и вывести в одну строку сообщение такого вида:

21.10.20 с 09:30 до 17:00, 22.10.20 с 09:30 до 17:00, 23.10.20 с 09:30 до 17:00 запланированы ремонтные работы в д.Палецкова, 8800250000


Буду Вам бесконечно признателен и благодарен за оказанную помощь!

К сообщению приложен файл. Размер - 43Kb
17 окт 20, 19:03    [22216022]     Ответить | Цитировать Сообщить модератору
 Re: Объединение событий  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7945
chasovoy96,

посмотрите по форуму, такой вопрос был на этой или на прошлой неделе.
17 окт 20, 19:34    [22216031]     Ответить | Цитировать Сообщить модератору
 Re: Объединение событий  [new]
PizzaPizza
Member

Откуда:
Сообщений: 395
если вы из текущего результата хотите сделать одну строку, это одно
если вам в принципе нужен результат в виде строки с диапазоном времен, это другое
придется в вашем коде разбираться, что бы понять какие там исходные таблицы и поля
17 окт 20, 19:38    [22216032]     Ответить | Цитировать Сообщить модератору
 Re: Объединение событий  [new]
chasovoy96
Member

Откуда: Екатеринбург
Сообщений: 77
PizzaPizza, Благодарю Вас за ответ! Да, Вы правы мне в принципе нужен результат в виде строки с диапазоном времен, данные привел в качестве примера. Я пытался копать в сторону for xml path но так и не разобрался с тем случаем, что у меня ((
17 окт 20, 19:43    [22216033]     Ответить | Цитировать Сообщить модератору
 Re: Объединение событий  [new]
PizzaPizza
Member

Откуда:
Сообщений: 395
вам надо выбирать уникальные строки ваших клиентов и клеить к ним строку с датами, которую проще получить кореллированным подзапросом с FOR XML

грубый пример

declare @tt table (client nvarchar(1), dates nvarchar(10))

Insert into @tt values 
('1', 'date 1'),
('2', 'date 2'),
('1', 'date 1'),
('2', 'date 2'),
('2', 'date 2'),
('1', 'date 1');

SELECT distinct client, 

(

SELECT ttdates.dates+', '
FROM @tt as ttdates
WHERE ttdates.client = ttclient.client 
FOR XML PATH ('')

) as dates

from @tt as ttclient
17 окт 20, 23:02    [22216084]     Ответить | Цитировать Сообщить модератору
 Re: Объединение событий  [new]
chasovoy96
Member

Откуда: Екатеринбург
Сообщений: 77
PizzaPizza, Благодарю за ответ!
Конечно еще не до конца понимаю как это сделать в моем случае, но какое-то представление из вашего примера уже могу составить
18 окт 20, 09:08    [22216166]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить