4

ここでの質問と同様: http://forums.asp.net/t/1580379.aspx/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)

ここに画像の説明を入力

[会場] を次のようにカンマで区切る必要があります。

"Interactive Seating Chart Advanced, Interactive Seating Chart Mode Multi-Click"
4

2 に答える 2

0

これを行う 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

これを行う 2 つ目の方法は、次のようにSTUFFSQL Server XML 拡張機能を使用することです。

        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

CLR ベースのソリューションは、通常、このユース ケースで最もパフォーマンスが高く、そのうちの 1 つを他のあまり理想的ではないソリューションとともにここで説明します...

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

于 2012-04-27T01:36:26.937 に答える