Sql 将多行中的列合并为单行

Sql 将多行中的列合并为单行,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我一直在尝试创建一个查询,返回活动使用历史记录的列表。订单可以应用于多个活动 orderId活动名称折扣挂载 ----------------------------------- 1.5折$5.20 1.30美元折扣1.10% 0.57美元折扣1.5% 如何创建一个返回一行多列的查询 orderId活动1活动2活动3折扣1折扣2折扣3 ---------------------------------------------------------------------- 1、50%、10

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

orderId活动名称折扣挂载
-----------------------------------
1.5折$5.20
1.30美元折扣1.10%
0.57美元折扣1.5%

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

orderId活动1活动2活动3折扣1折扣2折扣3
----------------------------------------------------------------------

1、50%、10%、5%、5%、5.20、1.30、0.57美元< /代码> < P>如果每个订单ID都有已知或最大数量的活动,请考虑一个简单的条件聚合,与RooSuxNoMe()/<代码>

一致。 示例

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

一个订单可以有多少个活动?谢谢你的回答。一个订单最多可以有3个活动。非常感谢,@John。多亏了你,我的问题才得以解决。İsmailDoğan总是乐于助人