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

Откуда: Пермь
Сообщений: 60
Здравствуйте!!!

create table test (
  id         int,
  key_code nvarchar(50),
  tip nvarchar(50), 
  obj nvarchar(50),  
  zamer float,
  
  )
-- inserting test data
insert test values(1, '01', 'ya', 'g1', 12.0)
insert test values(2, '01', 'ya', 'g2', 11.0)
insert test values(3, '01', 'ya', 'g1', 12.1)
insert test values(4, '02', 'фa', 'g4', 12.3)
insert test values(5, '02', 'фa', 'g4', 12.6)
insert test values(6, '02', 'фa', 'g4', 12.5)
insert test values(7, '02', 'фa', 'g4', 12.0)


В таблице test нужно сцепить записи поля obj и поля zamer, группируя по полям key_code и tip .

в итоге получить таблицу из двух строк:

key_code | tip | obj | zamer
01 | ya | g1,g2,g1 | 12.0,11.0,12.1
02 | фa | g4,g4,g4,g4 | 12.3,12.6,12.5,12.0

Подскажите, пожалуйста!
9 июн 17, 13:08    [20552976]     Ответить | Цитировать Сообщить модератору
 Re: конкатенация строк по ключу  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36973
https://www.sql.ru/faq/faq_topic.aspx?fid=130
https://www.sql.ru/faq/faq_topic.aspx?fid=731
9 июн 17, 13:12    [20553000]     Ответить | Цитировать Сообщить модератору
 Re: конкатенация строк по ключу  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
DECLARE @test TABLE (id INT, key_code NVARCHAR(50), tip NVARCHAR(50), obj NVARCHAR(50), zamer FLOAT)

INSERT @test
VALUES (1, N'01', N'ya', N'g1', 12.0)
     , (2, N'01', N'ya', N'g2', 11.0)
     , (3, N'01', N'ya', N'g1', 12.1)
     , (4, N'02', N'фa', N'g4', 12.3)
     , (5, N'02', N'фa', N'g4', 12.6)
     , (6, N'02', N'фa', N'g4', 12.5)
     , (7, N'02', N'фa', N'g4', 12.0)

SELECT t.key_code
     , t.tip
     , STUFF(CAST(x.query('a/text()') AS NVARCHAR(MAX)), 1, 2, '')
     , STUFF(CAST(x.query('b/text()') AS NVARCHAR(MAX)), 1, 2, '')
FROM (
    SELECT DISTINCT key_code, tip
    FROM @test
) t
OUTER APPLY (
    SELECT a = ISNULL(', ' + obj, '')
         , b = ISNULL(', ' + CAST(zamer AS NVARCHAR(20)), '')
    FROM @test t2
    WHERE t2.key_code = t.key_code
    FOR XML PATH(''), TYPE
) t2 (x)
9 июн 17, 13:42    [20553148]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить