Вопрос: Значения, разделенные запятыми, в одном столбце - SQL SERVER


Таблица клиентов
--------------
Имя идентификатора
1 Джеймс
2 Петр
 
Таблица заказов
---------------
OrderId CustId
100 1
101 1
102 2
 

Как я могу написать запрос, который возвращает что-то вроде этого

ID, Имя, ListofOrders
1, Джеймс, "100101"
2, Питер, "102"
 

В Sybase у меня была функция LIST, которую я мог бы использовать, но я не нашел подобную функцию в SQL SERVER


11


источник


Ответы:


Пожалуйста попробуйте:

select ID, [Name],
(select OrderID+',' from OrderTable where CustID=ID
group by OrderID for xml path('')) AS ListOfOrders
From CustomerTable

12



Создайте пользовательскую функцию, как показано ниже.

CREATE FUNCTION [dbo].[CommaSeperatedOrderIDs](@CustId INT) returns varchar(Max)
AS  
BEGIN   

DECLARE @CommaSeperatedValues VARCHAR(MAX)
SELECT @CommaSeperatedValues = COALESCE(@CommaSeperatedValues+',' , '') + OrderID
FROM OrderTable WHERE CustId = @CustId
RETURN @CommaSeperatedValues

END

А потом,

select ID, [Name], ([dbo].[CommaSeperatedOrderIDs](ID)) AS ListofOrders
From CustomerTable

1



Очень простое и удобное решение, приведенное в приведенной ниже ссылке.

http://tejasnshah.wordpress.com/2009/02/28/sql-server-get-column-values-as-comma-seperated-list-using-xml-path-instead-of-udfs-using-sql- сливаться /

SQL-запрос, написанный на этой ссылке, находится в изображении ... поэтому я не смог его скопировать.


0



Добавляя полную информацию от шейха Хариса, ссылка ,

Учитывая эту таблицу:

enter image description here

Чтобы получить выход, например:

enter image description here

Используйте следующий SQL:

SELECT field1,
    Substring(convert(varchar(100),
    (
    SELECT (', ' + field2)
        FROM #test t2
        WHERE t1.field1 = t2.field1
        ORDER BY field1, field2
    FOR XML PATH( '' )
                    )), 3, 1000 )
FROM #test t1
GROUP BY field1

Я добавил функцию преобразования в подстроку, чтобы было отображено поле WIDEMEMO (SQL Server)


0