2

这是架构:

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 子句中。

4

2 回答 2

1

你有两个问题:

  1. 因为您的分组结果将包含多个可能的日期,您需要在 order by 中包含该字段(这不适用于您尝试完成的内容)或对返回的结果组使用聚合函数(如sum或在你的要求,max)。
  2. group by应该在集体列上,s.firstname, s.lastname而不是它们的聚合。

所以像这样修复:

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 count(o.id) DESC, max(o.date)
于 2013-08-30T15:35:38.650 回答
1

请立即尝试:

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 COUNT(o.id)
于 2013-08-30T15:35:55.957 回答