【发布时间】:2014-06-11 11:45:55
【问题描述】:
我要做的是提取客户订购的订单和订单数量。 我能够获取所有数据,但我想要的是根据每个客户唯一的 TrackingID 对其进行分组,因此无论订购多少商品,每个客户只能获得一行。
我目前拥有的代码是
Select OT.TrackingID As FW_ID
,( Select
SUBSTRING(CT.Name, 1, CHARINDEX(' ', CT.Name) - 1)
Where LEN(CT.Name) - LEN(REPLACE(CT.Name, ' ', '')) > 0
) As Forename
,( Select
SUBSTRING(CT.Name, CHARINDEX(' ', CT.Name) + 1, 8000)
Where LEN(CT.Name) - LEN(REPLACE(CT.Name, ' ', '')) > 0
) As Surname
,( Select CAST(1 as VARCHAR) + ' p1 male'
Where OT.ArticleNr = 1
And CT.GroupNr IN (2,5)) As Amount_male_t1
,( Select CAST(1 as VARCHAR) + ' p1 female'
Where OT.ArticleNr = 2
And CT.GroupNr IN (2,5)) As Amount_female_t1
,( Select CAST(1 as VARCHAR) + ' p2 male'
Where OT.ArticleNr = 1
And CT.GroupNr IN (3,6)) As Amount_male_t2
,( Select CAST(1 as VARCHAR) + ' p2 female'
Where OT.ArticleNr = 2
And CT.GroupNr IN (3,6)) As Amount_female_t2
From OrderTable As OT
JOIN CustomerTable As CT
ON OT.CustomerNr = CT.CustomerNr
JOIN CampaignTable As CT
ON OT.TrackingID = CT.TrackingID
Where CT.GroupNr IN (2,3,5,6)
And OT.NewOrder = 1
我可以从中得到的一个例子是
FW_ID Forename Surname Amount_male_t1 Amount_female_t1 Amount_male_t2 Amount_female_t2
101 John Doe 1 p1 male NULL NULL NULL
101 John Doe NULL 1 p1 female NULL NULL
102 Steve Boss NULL NULL 1 p2 male NULL
102 Steve Boss NULL NULL 1 p2 male NULL
而我想要的是
FW_ID Forename Surname Amount_male_t1 Amount_female_t1 Amount_male_t2 Amount_female_t2
101 John Doe 1 p1 male 1 p1 female NULL NULL
102 Steve Boss NULL NULL 2 p2 male NULL
问题是,当我在 OT.TrackingID 上使用 Group By 时,我在名称上使用 MAX() 时出现错误,因为它们已经聚合,并且在尝试将包计数器转换为 COUNT() 函数时出错。 非常感谢您的帮助。
连接的表看起来像这样
订单表:
TrackingID CustomerNr OrderNr ArticleNr NewOrder OrderDate
101 10054 25 1 1 2014-06-09
101 10054 24 2 1 2014-06-09
102 10036 23 1 1 2014-06-08
102 10036 22 1 1 2014-06-07
103 10044 21 2 0 2014-06-06
客户表
CustomerNr Name Adress ZipCode CustomerCreatedDate
10054 John Doe Upstreet 123456 2013-05-18
10036 Steve Boss Downstreet 234567 2014-06-07
10044 Eric Cartman Sidestreet 345678 2014-02-21
活动表
TrackingID GroupNr ProductDescription
101 2 Group 2 & 5 are offered package 1
102 3 Group 3 & 6 are offered package 2
103 5 Group 2 & 5 are offered package 1
注意:如果有人可以就我的问题为何被否决提出建议,那将不胜感激。我不太清楚自己做错了什么。
【问题讨论】:
标签: sql sql-server group-by aggregate-functions