2012-09-15 12 views
11
 
Customer Table 
-------------- 
ID Name 
1 James 
2 Peter 
 
Order Table 
--------------- 
OrderId CustId 
100  1 
101  1 
102  2 

Jak mogę napisać kwerendę, która zwraca coś jak tenoddzielonych przecinkami wartości w jednej kolumnie - SQL Server

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

Sybase miałem funkcję o nazwie LIST, które mogę używać, ale ja dont znaleźć podobną funkcję w SQL Server

+1

[tutaj] (http://bradsruminations.blogspot.com/2009/10/making-list-and-checking -it-twice.html) możesz znaleźć kompleksowe rozwiązanie wraz z wyjaśnieniem. – WojtusJ

+0

Wow to kompleksowe rozwiązanie :) Sybase był znacznie lepszy dzięki funkcji LISTY. Zastanawiam się, dlaczego serwer SQL nie ma tej prostej rzeczy. – JanetOhara

Odpowiedz

12

spróbuj:

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

Dziękuję Techdo – JanetOhara

1

utworzyć użytkownika określonej funkcji, jak pokazano poniżej

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 

a następnie

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

Dodanie pełnych informacji z Sheikh Haris 'link.

W tej tabeli:

enter image description here

Aby uzyskać wyjście jak:

enter image description here

użyć następujących 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 

Dodałem funkcję konwersji do podciągu tak, że pole WIDEMEMO będzie wyświetlane (SQL Server)

Powiązane problemy