Объединить вывод хранимой процедуры SQL в одну строку, если несколько строк были возвращены с использованием разделителя запятых - PullRequest
0 голосов
/ 07 июля 2011

Я пытаюсь написать хранимую процедуру, которая возвращает значения таким образом, что если пара строк имеет все одинаковые значения, кроме нескольких столбцов, тогда SP должен вернуть одну строку со столбцами, имеющими разные значения между двумя строками, которые будут объединены вк тому, который разделен запятой. Пример: когда я запускаю SP, он возвращает 2 строки, как показано ниже.Обе строки имеют все столбцы, но один похожий.

col1               col2   col3               col4                    col5  col6         col7
------------------ ------ ------------------ ----------------------- ----- ------------ --------------
Remote Observation sdgfdg Remote Observation 2011-07-21 00:00:00.000 14.00 Inbound Call Order
Remote Observation sdgfdg Remote Observation 2011-07-21 00:00:00.000 14.00 Inbound Call Status Inquiry

Теперь мой желаемый результат -

col1               col2   col3               col4                    col5  col6         col7
------------------ ------ ------------------ ----------------------- ----- ------------ ---------------------
Remote Observation sdgfdg Remote Observation 2011-07-21 00:00:00.000 14.00 Inbound Call Order, Status Inquiry

Кто-нибудь знает, как этого добиться.

1 Ответ

1 голос
/ 01 сентября 2011

Существует множество способов объединить строки в строки. Вот один из способов:)

Подробнее читайте по адресу: http://www.simple -talk.com / sql / t-sql-программирование / объединение значений строк в транзакциях sql /

DECLARE @TestTable TABLE (
    col1 varchar(50),
    col2 varchar(50),
    col3 varchar(50),
    col4 varchar(50),
    col5 varchar(50),
    col6 varchar(50),
    col7 varchar(50)
)

insert into @TestTable 
values
('Remote Observation','sdgfdg','Remote Observation','2011-07-21 00:00:00.000 ','14.00','Inbound Call','Order'),
('Remote Observation','sdgfdg','Remote Observation','2011-07-21 00:00:00.000 ','14.00','Inbound Call','Status Inquiry'),
('Remote Observation','sdgfdg','Remote Observation','2011-07-21 00:00:00.000 ','14.00','Inbound Call','Status Inquiry')


select col1,col2,col3,col4,col5,col6,LEFT(col7,LEN(col7)-1) col7
from
(
    select col1,col2,col3,col4,col5,col6,
    ( 
        select distinct col7 + ',' 
        from @TestTable t2
        where t2.col1 = t1.col1
        AND t2.col2 = t1.col2
        AND t2.col3 = t1.col3
        AND t2.col4 = t1.col4
        AND t2.col5 = t1.col5
        AND t2.col6 = t1.col6
        for xml path('') 
    ) col7
    from @TestTable t1
    group by col1,col2,col3,col4,col5,col6
)  source 
...