2012-04-27 9 views
2

http://forums.asp.net/t/1580379.aspx/1 私は共通のセルを1つのカンマ区切りのセルにマージしようとしていますが、内側のジョインにまたがっています。多くの行のセルを単一のセルにマージする

私の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

ように私は、カンマ区切りのように[会場]必要があります。これを行う1つの方法は、サイドを使用することです

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

http://stackoverflow.com/questions/905818/tsql-comma-separation/913023 – lyrisey

+0

[SQL Server:カンマ区切りで複数の行を1列にすることはできますか?](http:// stackoverflow。 com/questions/2046037/sql-server-can-i-comma-delimit-multiple-rows-into-one-column) –

+0

Andriy - 私は結合でこれを行うのは難しいです。 – aron

答えて

0

行を処理する順序の影響を受けて、変数に反復的に値を設定します。これの欠点は、単純なクエリコンテキストでは機能しないことであり、最も効率的なソリューションではありません。

 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 

A CLRベースのソリューションは、通常、このユースケースのために最もパフォーマンスで、の1:

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拡張でありますこれらは、他の少ない理想的なソリューションの最大積載量とともにhereに記載されている...

あなたの問題は、設定されたロジックに根ざしたものではありませんので、クリーンなSQLソリューションがありません...

関連する問題