2009-06-30 5 views
1

У меня есть следующий набор записей:Группа записи и поместить результаты в одном поле

ID  AssetName 
882  Training Room VCR 
882  Training Room DVD 
882  Training Room TV 
858  Training Room VCR 
858  Training Room Computer 
858  Training Room TV 

Я хочу, чтобы сгруппировать каждый идентификатор и получить результирующий как таковую:

ID  Assets 
882  Training Room VCR<br/>Training Room DVD<br/>Training Room TV 
858  Training Room VCR<br/>Training Room Computer<br/>Training Room TV 

Есть ли способ, чтобы построить SQL 2005, который будет делать это?


дубликатом вопрос

How to return multiple values in one column (T-SQL)?

ответ

1

Я рекомендую держать логику добавления < бр/> элементов на стороне сервера кода, а не SQL запросов. Держите ваш SQL сосредоточенным на возврате набора результатов и использовании циклов в вашем коде, чтобы выяснить, как это сделать.

Первая попытка может включать в себя цикл, основанный на запросе, с другим циклом, основанным на запросе, внутри него, но это приведет к бомбардировке запросов в вашей базе данных. Лучше использовать один большой результат запроса и иметь логические ветви для условного вывода. Измените свой запрос на , чтобы облегчить желаемый результат, а не создать его. Например, вы можете заказать данные, чтобы вы знали, что получите все активы одного ID, прежде чем переходить к следующему.

1

Это позволит вам получить то, что вам нужно.

SELECT DISTINCT 
    [ID] 
    ,CONVERT(VARCHAR(MAX), 
    ( SELECT [AssetName] [div] 
     FROM [dbo].[tableName] t1 
     WHERE t1.[ID] = t.[ID] FOR XML PATH('') 
    )) [asset] 
FROM [dbo].[tableName] t 
+0

Это дает записи в этом формате:

Smart Board
In conference room 434
VCR/DVD player in conference room 434

+0

Тогда попробуйте это SELECT DISTINCT [ID] , REPLACE (CONVERT (VARCHAR (MAX), (SELECT [AssetName] + ' XXX ' FROM [dbo]. [TableName] t1 WHERE t1. [ID] = t. [ID] ДЛЯ XML PATH (' ') )),' XXX ','
') [актив] FROM [ dbo]. [tableName] t – Slim