将多行中的列合并为单行

Combine column from multiple rows into single row

我一直在尝试创建一个returns 活动使用历史列表的查询。一个订单可以应用于多个广告系列。

orderId CampaignName DiscountAmount ----------------------------------- 1 50% Off .20 1 10% Off .30 1 5% Off [=10=].57

如何创建 returns 单行多列的查询?

orderId Campaign1 Campaign2 Campaign3 Discount1 Discount2 Discount3 ---------------------------------------------------------------------- 1 50% Off 10% Off 5% Off .20 .30 [=11=].57

如果您知道每个 orderId 的活动数量或最大数量,请考虑与 row_number()

一致的简单条件聚合

例子

Declare @YourTable Table ([orderId] int,[CampaignName] varchar(50),[DiscountAmount] varchar(50))  Insert Into @YourTable Values 
 (1,'50% Off','.20')
,(1,'10% Off','.30')
,(1,'5% Off','[=10=].57')

Select orderId
      ,Campaign1 = max(case when RN=1 then CampaignName end)
      ,Campaign2 = max(case when RN=2 then CampaignName end)
      ,Campaign3 = max(case when RN=3 then CampaignName end)
      ,Discount1 = max(case when RN=1 then DiscountAmount end)
      ,Discount2 = max(case when RN=2 then DiscountAmount end)
      ,Discount3 = max(case when RN=3 then DiscountAmount end)
 From  (
        Select *
              ,RN = row_number() over(partition by orderId order by (select null))
         From @YourTable
       ) A
 Group By OrderID

Returns

orderId Campaign1   Campaign2   Campaign3   Discount1   Discount2   Discount3
1       50% Off     10% Off     5% Off      .20       .30       [=11=].57