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

Customer Table
--------------
ID   Name
1   James
2   Peter
Order Table
---------------
OrderId  CustId
100     1
101     1
102     2

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

ID,Name,ListofOrders
1,James,"100,101"
2,Peter,"102"

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

Ответ 1

Попробуйте:

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

Ответ 2

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

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

Ответ 4

Добавление полной информации из шейх Харис ссылка.

С учетом этой таблицы:

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)