2-й столбец - это столбец NVARCHAR (MAX).

я есть две таблицы:

Имена (id, name) Адреса (id, name_id, адрес)

Я хочу написать запрос, который возвращает меня: имя, список адресов (адрес1, адрес2, адрес3, ..)

Что-то вроде:

Select A.name, B.list_of_addresses
From Names A
    Inner Join (Select name_id, /*list_of_addresses with comma between them*/
                From Addresses
                Group By name_id)  B ON A.id=B.name_id
 Naor24 янв. 2011 г., 23:23
@Ken Downs: Можете ли вы дать пример? Я не очень понимаю. @OMG Пони: Я использую SQL Server 2005.
 Ken Downs24 янв. 2011 г., 22:46
Вы можете использовать общее табличное выражение для объединения строк, тогда остальная часть запроса работает.
 OMG Ponies24 янв. 2011 г., 22:45
Для какой версии SQL Server?

Ответы на вопрос(1)

SQL Server 2005 и далее.

Select
    A.name,
    stuff((
        select ',' + B.address
        from Addresses B
        WHERE A.id=B.name_id
        for xml path('')),1,1,'')
From Names A

Это хорошо работает, если у вас еще нет запятых в адресе, но даже если и есть, поскольку ваш запрос заключается в том, чтобы ставить запятые между ними ... это, вероятно, так же, как и "правильно".

 RichardTheKiwi24 янв. 2011 г., 23:29
FOR XML возвращает данные в виде XML. Путь (x) дает имя тега для каждого узла. Путь ('') дает пустое имя, поэтому значения узла(','+B.address) в конечном итоге в виде простого текста в одной строке. STUFF - это функция для удаления первого «,» из списка.
 RichardTheKiwi24 янв. 2011 г., 23:35
2-й столбец - это столбец NVARCHAR (MAX).
 Naor24 янв. 2011 г., 23:33
Знаете ли вы, как я могу получить результат в C #? делает тип результата строки? XML?
 Naor24 янв. 2011 г., 23:27
Что делает для xml path ('')?

Ваш ответ на вопрос