2014-01-25 2 views
1

У меня т Таблица, как показано ниже:Объединение нескольких строк в одну строку, другую таблицу

Магазин стол:

ShopID | PersonID 
----------------- 
    1 | 10001 
    2 | 10002 
    2 | 10003 

Person таблицу

PersonID | PersonName 
--------------------- 
    10001 | Alex 
    10002 | John 
    10003 | William 

После этого, я хотите группу по ShopID. Мой ожидаемый результат, как показано ниже:

ShopID | PersonName 
-------------------- 
    1 | Alex 
    2 | John/William 

меня пытаются отнести: Combine multiple rows into one row. и http://www.mssqltips.com/sqlservertip/2914/rolling-up-multiple-rows-into-a-single-row-and-column-for-sql-server-data/. Но это не то, что я хочу.

Как объединить несколько строк в одну строку в другой таблице?

+0

Максимальное количество людей в магазине? –

+0

Вы что-то пробовали? Что не работает. –

ответ

1

Оформить заявку for xml, чтобы объединить результаты. stuff функции используются для удаления первого экземпляра прямых косых черт, а функция xml.value используются для хранения &, <, > и других специальных символов быть XML endoded в &amp; &gt; &lt; и т.д.

Существовала ошибка в моем первоначальном запросе ответа, here отредактирована версия:

Select s.shopid, 
Stuff (
(
    select '/' + p.personName 
    from person p 
    inner join shop s2 on s2.personID = p.personID 
    where s2.shopID = s.shopID 
    For xml path(''), TYPE --for xml to place everything under node '', which will concatenate the results. 
) 
.value('.','NVARCHAR(MAX)') --this is used to convert the XML to nvarchar(max), so that &, <, >, and other special chars do not get XML encoded. 
, 1,3,'') --use stuff to replace first 3 characters with empty string. 
as PersonName 
From shop s 
Group by s.shopid 
; 
Смежные вопросы