繁体   English   中英

将多行中的列合并为单行

[英]Combine column from multiple rows into single row

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

orderId CampaignName DiscountAmount ----------------------------------- 1 50% Off $5.20 1 10% Off $1.30 1 5% Off $0.57

如何创建一个返回单行多列的查询?

orderId Campaign1 Campaign2 Campaign3 Discount1 Discount2 Discount3 ---------------------------------------------------------------------- 1 50% Off 10% Off 5% Off $5.20 $1.30 $0.57

如果每个 orderId 有一个已知的或最大数量的活动,请考虑与row_number()一起使用一个简单的条件聚合

例子

Declare @YourTable Table ([orderId] int,[CampaignName] varchar(50),[DiscountAmount] varchar(50))  Insert Into @YourTable Values 
 (1,'50% Off','$5.20')
,(1,'10% Off','$1.30')
,(1,'5% Off','$0.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

退货

orderId Campaign1   Campaign2   Campaign3   Discount1   Discount2   Discount3
1       50% Off     10% Off     5% Off      $5.20       $1.30       $0.57

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM