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总是乐于助人