powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вывод нескольких значений из одного столбца в строку по условию
5 сообщений из 5, страница 1 из 1
Вывод нескольких значений из одного столбца в строку по условию
    #40087001
RuCosinus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Никак не соображу, как составить запрос, который из одного столбца собирает данные в одну строку, а другие столбцы отображает как есть

Есть примерно вот такая таблица, в которой хранятся строки с сообщениями, разбитыми по частям:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
declare
	@data table
	(IDMsg int					--ID всего сообщения
	,IDMsgPart tinyint			--Сквозной ID записи
	,MailAddr varchar(50)	--Адрес получателя
	,Mailbody varchar(19)	--Текст сообщения
	,SendDatetime smalldatetime	--Дата и время отправки
	)

insert into @data select 152,1,'ivanoff@rumail.ru','Первая часть сообще','2021-07-27 14:02'
insert into @data select 152,2,'ivanoff@rumail.ru','ния и тут вторая ча','2021-07-27 14:02'
insert into @data select 152,3,'ivanoff@rumail.ru','сть а тут третья','2021-07-27 14:02'
insert into @data select 198,4,'semenoff@enmail.en','Тут просто произвол','2021-07-27 14:03'
insert into @data select 198,5,'semenoff@enmail.en','ьный текст для для ','2021-07-27 14:03'
insert into @data select 198,6,'semenoff@enmail.en','визуального пониман','2021-07-27 14:03'
insert into @data select 198,7,'semenoff@enmail.en','ия','2021-07-27 14:04'

select * from @data



Нужно получить вот такой результат
IDMsgMsgCountMailAddrMailbody1523ivanoff@rumail.ruПервая часть сообщения и тут вторая часть а тут третья1984'semenoff@enmail.enТут просто произвольный текст для для визуального понимания

QUOTENAME мне не удалось прикрутить, я как то решал с помощью него что-то отдаленно похожее. Подозреваю, что можно элегантно решить с помощь xml (for xml raw), но я в нем что-то никак пока не разберусь, по оф.документашке не получается, а что-то другое с разжевыванием найти не могу.

Подскажите, куда смотреть.
...
Рейтинг: 0 / 0
Вывод нескольких значений из одного столбца в строку по условию
    #40087006
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
string_agg
...
Рейтинг: 0 / 0
Вывод нескольких значений из одного столбца в строку по условию
    #40087008
RuCosinus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm
string_agg

Прошу прощения, забыл указать, что сервер 2014
...
Рейтинг: 0 / 0
Вывод нескольких значений из одного столбца в строку по условию
    #40087013
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RuCosinus,

Код: sql
1.
2.
3.
4.
5.
select
 a.IDMsg, a.MsgCount, a.MailAddr, b.x.value('.', 'varchar(max)')
from
 (select IDMsg, MailAddr, count(*) as MsgCount from @data group by IDMsg, MailAddr) a cross apply
 (select Mailbody as [*] from @data where IDMsg = a.IDMsg order by IDMsgPart for xml path(''), type) b(x);
...
Рейтинг: 0 / 0
Вывод нескольких значений из одного столбца в строку по условию
    #40087139
Alex_Va
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RuCosinus,

либо так:


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT
	 IDMsg
	,MailAddr
	,count(*) AS MsgCount
	,(
		SELECT '' + Mailbody
		FROM @data
		WHERE ( IDMsg = a.IDMsg AND MailAddr = a.MailAddr)
		ORDER BY IDMsgPart
		FOR XML PATH('') ,TYPE ).value('(./text())[1]', 'VARCHAR(MAX)') AS Mailbody
FROM @data a
GROUP BY IDMsg
	,MailAddr
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вывод нескольких значений из одного столбца в строку по условию
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]