将多行中的列合并为单行
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
我一直在尝试创建一个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