2016-06-30 2 views
2

У меня есть, как показано ниже результирующий набор,Смешайте 2 строки в 1 строку - Sybase

id fname lname 
11 Tom Jerry 
11 Tom Harry 

Есть ли способ, я мог бы объединить обе строку в строку 1, а значение LNAME объединено с запятыми. Как показано ниже,

11 Tom Jerry,Harry 

Cheers !!

ответ

1

Вы можете сделать это с помощью материала Stuff и некоторых XML. Изменить: Не тестировался на Sybase, но дать ему пойти и посмотреть

Тестовые данные

CREATE TABLE #TestData (id int, fname varchar(20), lname varchar(20)) 
INSERT INTO #TestData 
VALUES 
(11,'Tom','Jerry') 
,(11,'Tom','Harry') 

Query

SELECT 
a.id 
,a.fname 
,STUFF((SELECT ',' + b.lname 
     FROM #TestData b 
     WHERE b.id = a.id 
     FOR XML PATH('')), 1, 1, '') lname 
FROM #TestData a 
GROUP BY a.id, a.fname 

Результат

id fname lname 
11 Tom  Jerry,Harry 
+0

Является ли «FOR XML PATH» доступным в Sybase? –

+0

неуверенный, я пропустил эту часть оригинального вопроса. это проверенный и проверенный метод на сервере sql, но я не имею доступа к системе sybase dev, я боюсь. –

+0

Спасибо за усилия в любом случае. Также GROUP_CONCAT, который делает то же самое, недоступен в sybase. Грустный!! –

0

шаги: (псевдокод)

1 - получить базовый стол данные в порядке по id, fname

2 - обрабатывать каждую строку в курсоре и использовать ниже логику до идентификатора, значения fname одинаковы при изменении gtes, управление должно выйти из цикла, чтобы вставить новый набор значений (id, fname), добавленное запятыми, разделенное последнее имя

BEGIN 
    SET @List = @List + ',' + Cast(@lname As varchar(10)) 
END 
Смежные вопросы