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

Làm thế nào tôi có thể viết một truy vấn mà trả về một cái gì đó như thế nàyComma tách ra các giá trị trong một cột - SQL SERVER

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

Trong Sybase Tôi đã có một chức năng gọi là DANH mà tôi có thể sử dụng nhưng tôi không tìm thấy một chức năng tương tự trong SQL SERVER

+1

[Ở đây] (http://bradsruminations.blogspot.com/2009/10/making-list-and-checking -it-twice.html) bạn có thể tìm thấy giải pháp phức tạp cùng với lời giải thích. – WojtusJ

+0

Wow đó là một giải pháp phức tạp :) Sybase tốt hơn nhiều với hàm LIST của nó. tự hỏi tại sao máy chủ SQL không có điều đơn giản này – JanetOhara

Trả lời

12

Vui lòng thử:

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

Cảm ơn bạn Techdo – JanetOhara

1

Tạo một User Defined Function như hình dưới đây

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 

Và sau đó,

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

Thêm chi tiết đầy đủ từ Sheikh Haris 'link.

Với bảng này:

enter image description here

Để có được sản lượng như:

enter image description here

Sử dụng SQL sau:

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 

Tôi đã thêm một hàm chuyển đổi vào chuỗi con để trường WIDEMEMO sẽ được hiển thị (SQL Server)

Các vấn đề liên quan