2012-04-27 166 views
2

與此處的問題類似: http://forums.asp.net/t/1580379.aspx/1 我試圖將普通單元格合併到單個逗號分隔單元格中,但是通過內部連接。SQL從多行合併單元格到單個單元格

我的SQL是:

SELECT DISTINCT tb_Order.OrderNumber, tb_Order.OrderId, 
    tb_Order.orderDate, tb_Order.OrderTotal, 
    tb_OrderStatus.OrderStatus, tb_Order.GroupOrderId, 
    tb_Venue.Title AS Venue 
FROM tb_Order INNER JOIN tb_OrderItem ON tb_Order.OrderId = tb_OrderItem.OrderId 
    INNER JOIN tb_Show ON tb_OrderItem.ShowId = tb_Show.showId 
    INNER JOIN tb_OrderStatus ON tb_Order.OrderStatusId = tb_OrderStatus.OrderStatusID 
    INNER JOIN tb_Venue ON tb_Show.VenueId = tb_Venue.id 
WHERE (tb_Order.OrderId = 705) 

enter image description here

我需要的[地點]以逗號分隔,如:

"Interactive Seating Chart Advanced, Interactive Seating Chart Mode Multi-Click" 
+0

看看http://stackoverflow.com/questions/905818/tsql-comma-separation/913023的 – lyrisey 2012-04-27 00:59:09

+0

可能重複[SQL服務器?我可以用逗號分隔多行合併到一列(HTTP://計算器。 com/questions/2046037/sql-server-can-i-comma-delimit-multiple-rows-into-one-column) – 2012-04-27 09:48:02

+0

Andriy - 不是重複的,因爲我正在嘗試使用連接來完成此操作。 – aron 2012-04-27 17:49:24

回答

0

的一種方式做,這是通過使用側行處理順序影響迭代地填充變量,像這樣。這樣做的缺點是它不能在簡單的查詢語境中工作,也不是最有效的解決方案。

DECLARE @venues varchar(max) 
     SET @venues = '' 

    SELECT @venues = 
     CASE WHEN @venues = '' THEN v.Title 
     ELSE @venues + ',' + v.Title END 
    FROM tb_Venue v 

    SELECT @venues 

做到這一點的第二種方法是用STUFF和SQL Server XML擴展,像這樣:

基於CLR的
 SELECT DISTINCT v.Title, 
     (STUFF(
     (SELECT ',' + v2.Title 
     FROM tb_Venue v2 
     -- uncomment this line if you are going 
     -- to aggregate only by something in the outer query 
     -- WHERE v2.GroupKey = v.GroupKey 
     ORDER BY v2.Title 
     FOR XML PATH(''), TYPE, ROOT 
     ).value('root[1]','varchar(max)'),1,1,'')) as Aggregation 
     FROM tb_Venue v 

一個解決方案通常是最高效的用於該用途的情況下,和一個那些被描述here與其他不太理想的解決方案一大堆沿...

你的問題不是一個根植於一套邏輯,所以沒有一個乾淨的SQL解決方案......