这是架构:
create table Retailer (
row bigint,
id uniqueidentifier,
name varchar(255),
domainName varchar(MAX)
)
create table SalesPeople
( Row bigint not null identity,
ID uniqueidentifier not null,
Retailer_ID uniqueidentifier not null,
FirstName nvarchar(255) not null,
LastName nvarchar(255) not null,
EmailAddress nvarchar(511) ,
PhoneNumber nvarchar(255)
)
orders (
row bigint,
id uniqueidentifier,
Retailer_ID uniqueidentifier,
salesperson_id uniqueidentifier,
prod_id uniqueidentifier,
date datetime
)
我们正在设计一个查询,该查询将报告销售人员以及他们为特定零售商生成的订单数量。此外,如果 Mark 和 Bill 并列,但 Bills 的订单较新,Bill 将需要出现在 Mark 之上。此外,产生最多订单的人需要出现在列表的最顶端。
比如说对于零售商 EBAY,销售数据显示 John 在 2012 年 1 月完成了 2000 个订单,Bill 在 2010 年 1 月完成了 999 个订单,在 2013 年 8 月完成了 1 个订单,Mark 在 2013 年 6 月完成了 1000 个订单,Marry 完成了 700 个订单2010 年 7 月和 2013 年 7 月的 150 个订单。输出如下所示:
Sales Person #ofOrdersCreate
John 2000
Bill 1000
Mark 1000
Marry 850
我们尝试过的查询是:
select s.firstname + ' '+s.LastName , COUNT(o.id) from Orders o
inner join SalesPeople s on s.ID=o.Retailer_ID
inner join Retailers r on r.id = o.retailer_id
where r.name='EBAY'
group by s.firstname + ' '+s.LastName
order by o.date
但是我们从上面的连接语句中得到错误,因为我们无法对数据进行排序,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。