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

Откуда:
Сообщений: 74
Есть задача "Суммировать" по текстовому полю.
Есть такая таблица

select 1 R1, 'aaa.01' Ser, 1 СерНомИД union all
select 1 , 'aaa.02', 2

Необходимо получить вот такой результат
R1 SerNN
1 aaa.01, aaa.02

Тоесть, необходимо сгруппировать по полю R1 и сложить в пределах одной группы все текстовые поля.

Как это сделать?
27 сен 10, 14:18    [9507368]     Ответить | Цитировать Сообщить модератору
 Re: Конкатенация  [new]
_ч_
Member

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

поискали бы получше на форуме
27 сен 10, 14:37    [9507521]     Ответить | Цитировать Сообщить модератору
 Re: Конкатенация  [new]
_ч_
Member

Откуда:
Сообщений: 1427
USE tempdb;

IF OBJECT_ID(N'T','U') IS NOT NULL DROP TABLE T;
CREATE TABLE T(R1 INT NULL, Ser NVARCHAR(100) NULL, СерНомИД INT NULL);
INSERT T(R1, Ser, СерНомИД)
          SELECT 1,'aaa.01', 1
UNION ALL SELECT 1,'aaa.02', 2
UNION ALL SELECT 1,'aaa.03', 3
UNION ALL SELECT 2,'aaa.04', 4
UNION ALL SELECT 3,'aaa.07', 5
UNION ALL SELECT 3,'aaa.0311', 6;

SELECT DISTINCT
 R1,
 STUFF((SELECT ', '+TT.Ser FROM T TT WHERE TT.R1=T.R1 ORDER BY Ser FOR XML PATH('')),1,1,'')lst
FROM T;

вот в частности, автор iap
27 сен 10, 14:41    [9507563]     Ответить | Цитировать Сообщить модератору
 Re: Конкатенация  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
_ч_
USE tempdb;

IF OBJECT_ID(N'T','U') IS NOT NULL DROP TABLE T;
CREATE TABLE T(R1 INT NULL, Ser NVARCHAR(100) NULL, СерНомИД INT NULL);
INSERT T(R1, Ser, СерНомИД)
          SELECT 1,'aaa.01', 1
UNION ALL SELECT 1,'aaa.02', 2
UNION ALL SELECT 1,'aaa.03', 3
UNION ALL SELECT 2,'aaa.04', 4
UNION ALL SELECT 3,'aaa.07', 5
UNION ALL SELECT 3,'aaa.0311', 6;

SELECT DISTINCT
 R1,
 STUFF((SELECT ', '+TT.Ser FROM T TT WHERE TT.R1=T.R1 ORDER BY Ser FOR XML PATH('')),1,1,'')lst
FROM T;

вот в частности, автор iap
Если Ser может включать в себя спецсимволы XML, то немного усложнить:
USE tempdb;
SET NOCOUNT ON;
GO
IF OBJECT_ID(N'T','U') IS NOT NULL DROP TABLE T;
CREATE TABLE T(R1 INT NULL, Ser NVARCHAR(100) NULL, СерНомИД INT NULL);
GO
INSERT T(R1, Ser, СерНомИД)
          SELECT 1,N'aaa.01', 1
UNION ALL SELECT 1,N'aaa.02', 2
UNION ALL SELECT 1,N'aaa.03', 3
UNION ALL SELECT 2,N'aaa.04', 4
UNION ALL SELECT 3,N'aaa.07', 5
UNION ALL SELECT 3,N'aaa.0311', 6;
GO
SELECT
 R1,
 STUFF((SELECT N', '+TT.Ser FROM T TT WHERE TT.R1=T.R1 ORDER BY TT.Ser FOR XML PATH(''),TYPE).value('.','NVARCHAR(MAX)'),1,2,N'')lst
FROM T
GROUP BY R1
ORDER BY R1;
GO
27 сен 10, 15:00    [9507736]     Ответить | Цитировать Сообщить модератору
 Re: Конкатенация  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
_ч_
...

... PATH('')),1,2],'')lst
м.б. так? )
27 сен 10, 15:01    [9507742]     Ответить | Цитировать Сообщить модератору
 Re: Конкатенация  [new]
_ч_
Member

Откуда:
Сообщений: 1427
Зайцев Фёдор
_ч_
...

... PATH('')),1,2],'')lst
м.б. так? )


так :)
27 сен 10, 15:07    [9507812]     Ответить | Цитировать Сообщить модератору
 Re: Конкатенация  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Зайцев Фёдор
_ч_
...

... PATH('')),1,2],'')lst
м.б. так? )
Выше я подправил
27 сен 10, 15:16    [9507905]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Конкатенация  [new]
userAx
Member

Откуда: Украина
Сообщений: 15
_ч_
USE tempdb;

IF OBJECT_ID(N'T','U') IS NOT NULL DROP TABLE T;
CREATE TABLE T(R1 INT NULL, Ser NVARCHAR(100) NULL, СерНомИД INT NULL);
INSERT T(R1, Ser, СерНомИД)
          SELECT 1,'aaa.01', 1
UNION ALL SELECT 1,'aaa.02', 2
UNION ALL SELECT 1,'aaa.03', 3
UNION ALL SELECT 2,'aaa.04', 4
UNION ALL SELECT 3,'aaa.07', 5
UNION ALL SELECT 3,'aaa.0311', 6;

SELECT DISTINCT
 R1,
 STUFF((SELECT ', '+TT.Ser FROM T TT WHERE TT.R1=T.R1 ORDER BY Ser FOR XML PATH('')),1,1,'')lst
FROM T;

вот в частности, автор iap


Полезно, спасибо! Пригодилось, не знал уже, как удалить запятую.
22 апр 15, 10:43    [17547467]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить