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

Откуда:
Сообщений: 16
Добрый день всем!
Есть такая задачка, помогите пожалуйста:
Есть таблица Tab1:

ID Ves FIO
1 58 Asanov
2 58 Saparov
3 62 Muhtarov
4 62 Kaldarov
5 62 Tajibekov
6 58 Kadirov
7 69 Nabiyev
8 69 Maratov

Надо объединить записей таким образом, через запятой:

ID Ves EXP
1 58 Asanov, Saparov, Kadirov
2 62 Muhtarov, Kaldarov, Tajibekov
2 69 Nabiyev, Maratov

Помогите плиииииз!!!!
2 ноя 15, 12:02    [18358125]     Ответить | Цитировать Сообщить модератору
 Re: Объедидение записей  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20659
Непонятно, как формируются значения ID выходного набора.
А если без этого поля - используйте FOR XML.
2 ноя 15, 12:17    [18358249]     Ответить | Цитировать Сообщить модератору
 Re: Объедидение записей  [new]
Zhassulan
Member

Откуда:
Сообщений: 16
Akina, это вот правильный вопрос

Есть таблица Tab1:

ID Ves FIO
1 58 Asanov
2 58 Saparov
3 62 Muhtarov
4 62 Kaldarov
5 62 Tajibekov
6 58 Kadirov
7 69 Nabiyev
8 69 Maratov

Надо объединить записей таким образом, через запятой:

ID Ves EXP
1 58 Asanov, Saparov, Kadirov
2 62 Muhtarov, Kaldarov, Tajibekov
3 69 Nabiyev, Maratov
2 ноя 15, 12:33    [18358343]     Ответить | Цитировать Сообщить модератору
 Re: Объедидение записей  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20659
Устранение дублирования значений ID не дало ответа на поставленный вопрос. Впрочем, теперь для генерации значения этого поля можно использовать ROW_NUMBER().
Рекомендация тоже не изменяется.
2 ноя 15, 12:49    [18358435]     Ответить | Цитировать Сообщить модератору
 Re: Объедидение записей  [new]
Zhassulan
Member

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

Надо объединить записей таким образом, через запятой:

Ves EXP
58 Asanov, Saparov, Kadirov
62 Muhtarov, Kaldarov, Tajibekov
69 Nabiyev, Maratov

ID не надо
2 ноя 15, 13:55    [18358975]     Ответить | Цитировать Сообщить модератору
 Re: Объедидение записей  [new]
Добрый Э - Эх
Guest
Zhassulan,

сказали же - for xml path
2 ноя 15, 13:58    [18358998]     Ответить | Цитировать Сообщить модератору
 Re: Объедидение записей  [new]
Zhassulan
Member

Откуда:
Сообщений: 16
Добрый Э - Эх,

Плиииз, поподробнее можно? Я новичек в этом деле((((((
2 ноя 15, 14:01    [18359013]     Ответить | Цитировать Сообщить модератору
 Re: Объедидение записей  [new]
Glory
Member

Откуда:
Сообщений: 104760
Zhassulan
Плиииз, поподробнее можно? Я новичек в этом деле

на ссылку нажмите
2 ноя 15, 14:02    [18359022]     Ответить | Цитировать Сообщить модератору
 Re: Объедидение записей  [new]
Konst_One
Member

Откуда:
Сообщений: 11543
Declare @Table table (ID int, Ves int, FIO varchar(50))

insert into @Table(ID, Ves, FIO)
VALUES 
(1, 58, 'Asanov'),
(2, 58, 'Saparov'),
(3, 62, 'Muhtarov'),
(4, 62, 'Kaldarov'),
(5, 62, 'Tajibekov'),
(6, 58, 'Kadirov'),
(7, 69, 'Nabiyev'),
(8, 69, 'Maratov')



SELECT 
	t.Ves,
 	STUFF((SELECT ',' + a.FIO FROM @Table a WHERE a.Ves = t.Ves FOR XML PATH(''), TYPE).value('.','varchar(max)'),1,2,'')  as FIO
FROM @Table t
GROUP BY t.Ves
2 ноя 15, 14:15    [18359139]     Ответить | Цитировать Сообщить модератору
 Re: Объедидение записей  [new]
iap
Member

Откуда: Москва
Сообщений: 47008
WITH Tab1 AS(SELECT * FROM(VALUES
 (1,58,'Asanov')
,(2,58,'Saparov')
,(3,62,'Muhtarov')
,(4,62,'Kaldarov')
,(5,62,'Tajibekov')
,(6,58,'Kadirov')
,(7,69,'Nabiyev')
,(8,69,'Maratov')
)T(ID,Ves,FIO))
SELECT DENSE_RANK()OVER(ORDER BY MIN(T.ID))
,T.Ves
,FIO=STUFF
(
 (
  SELECT ', '+FIO
  FROM Tab1 TT
  WHERE TT.Ves=T.Ves
  ORDER BY TT.ID
  FOR XML PATH(''),TYPE
 ).value('.','varchar(100)')
 ,1,2,''
)
FROM Tab1 T
GROUP BY T.Ves
ORDER BY MIN(T.ID);
2 ноя 15, 14:16    [18359149]     Ответить | Цитировать Сообщить модератору
 Re: Объедидение записей  [new]
Konst_One
Member

Откуда:
Сообщений: 11543
неточность маленькая , надо 2 на 1 заменить:

varchar(max)'),1,1,'')  
2 ноя 15, 14:36    [18359298]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить