2011-07-14 8 views
5

Tôi có một bảng sản phẩm như dưới đây. Tôi muốn tạo một sql sẽ cho tôi tên sản phẩm được phân tách bằng dấu chấm phẩy.Tạo sql sẽ cho tôi tên sản phẩm được phân tách bằng dấu chấm phẩy?

ProductName AccountExpert 
-------------------------- 
Tea   JohnSmith 
Banana  GarySulvan 
Water  JohnSmith 
Candy  BobbySimmons 
ConfecItem BobbySimmons 
Bread  JohnSmith 
Soda   JohnSmith 

Sql đầu ra nên như thế này

AccountExpert Products 
----------------------- 
JohnSmith  Tea; Water; Bread; Soda 
GarySulvan  Banana 
BobbySimmons Candy; ConfecItem 
+1

Bạn đang sử dụng công cụ SQL nào? (Điều này rất quan trọng vì kết hợp ghép thực sự khá phức tạp và câu trả lời có thể phụ thuộc vào động cơ và phiên bản bạn có.) –

+0

bạn nên nghiên cứu thêm một chút và một số nỗ lực trước khi bạn đăng câu hỏi của mình tại đây. Đây không phải là trang web Hỏi & Đáp, đó là nơi mọi người sẽ giúp bạn nếu bạn đã nỗ lực và bị kẹt ở đâu đó! –

+2

@Tarun cho thấy một số nỗ lực là một cử chỉ tốt đẹp, chắc chắn, nhưng ... nó * không * một trang web Hỏi & Đáp ?! Tất nhiên là thế rồi! –

Trả lời

1

Với MS SQL bạn có thể sử dụng FOR XML, sử dụng hàm Stuff để loại bỏ dấu phân tách dư thừa. Thật không may, không có chức năng concat nhóm như với MySQL.

CREATE TABLE #ProductExpert (ProductName nvarchar(20), AccountExpert nvarchar(20)) 

INSERT INTO #ProductExpert(ProductName, AccountExpert) SELECT 
'Tea',   'JohnSmith'  UNION ALL SELECT 
'Banana',  'GarySulvan' UNION ALL SELECT 
'Water',  'JohnSmith'  UNION ALL SELECT 
'Candy',  'BobbySimmons' UNION ALL SELECT 
'ConfecItem', 'BobbySimmons' UNION ALL SELECT 
'Bread',  'JohnSmith'  UNION ALL SELECT 
'Soda',   'JohnSmith' 

SELECT DISTINCT 
    ae.AccountExpert, 
    Stuff((
     SELECT 
      '; ' + p.ProductName 
     FROM 
      #ProductExpert AS p 
     WHERE 
      ae.AccountExpert = p.AccountExpert 
     ORDER BY 
      p.ProductName 
     FOR XML PATH('') 
    ), 1, 2, '') AS Products 
FROM 
    #ProductExpert AS ae 
ORDER BY 
    ae.AccountExpert 

DROP TABLE #ProductExpert 
+0

Cảm ơn bạn rất nhiều cho sql. Nó làm việc trong lần thử đầu tiên. –

1

nếu bạn đang sử dụng MySQL sau đó sử dụng nhóm và GROUP_CONCAT:

SELECT AccountExpert, GROUP_CONCAT(ProductName SEPARATOR '; ') 
FROM ProductExperts 
GROUP BY AccountExpert 
+0

oh chỉ nhận thấy rằng bạn đã gắn thẻ câu hỏi là sql-server-2008, nhanh chóng googling trả lại bài đăng này: http://blog.shlomoid.com/ 2008/11/emulating-mysqls-groupconcat-function.html hy vọng rằng sẽ giúp – keymone