Adventure Works SQL Server 2014查询

时间:2017-10-31 13:22:16

标签: sql sql-server adventureworks

我正在使用AdventureWorks 2014数据库编写SQL查询。我想显示哪个员工已售出最高订单价值。

我试图自己编写每个select语句(见下文),但我希望能够将两个查询合并为一个:

select 
    s.SalesOrderID, s.SalesPersonID, COUNT(sd.SalesOrderID) as count 
from 
    Sales.SalesOrderHeader s, Sales.SalesOrderDetail sd
where 
    s.SalesOrderID = sd.SalesOrderID 
group by           
    sd.SalesOrderID, s.SalesOrderID, s.SalesPersonID 
order by 
    sd.SalesOrderID

select 
    sd.SalesOrderID, sd.LineTotal, count (sd.SalesOrderID) as count 
from 
    Sales.SalesOrderDetail sd
group by 
    sd.SalesOrderID, sd.LineTotal 
order by 
    sd.SalesOrderID

enter image description here

3 个答案:

答案 0 :(得分:0)

你正在寻找这样的东西:

select top 1  
    s.SalesPersonID
    ,sum(sd.LineTotal ) as orderTotal
    s.salesorderid
from
    Sales.SalesOrderHeader s
    inner join  Sales.SalesOrderDetail sd
        on s.SalesOrderID = sd.SalesOrerID
group by 
    s.SalesPersonID
    s.salesorderid
order by
    orderTotal desc

在SQL Server中,您只需要使用top函数请求有限数量的行(这可以在正确排序时为您提供最高的订单值)。这可以与一个组一起使用,它将所有行总数添加到一起,这些行总计在被分组的列中具有相同的值。

答案 1 :(得分:0)

这就是我要做的,以获得每个销售人员的总数。按Sum(sd.LineTotal)降序排序以获得最高价值。

select s.SalesPersonID ,COUNT(sd.SalesOrderID) as count,sum(sd.LineTotal ) as orderTotal  
from Sales.SalesOrderHeader s 
Inner Join Sales.SalesOrderDetail sd ON s.SalesOrderID=sd.SalesOrderID 
group by s.SalesPersonID 
order by 3 Desc

答案 2 :(得分:0)

感谢您的努力。但是,有一种更简单的方法可以得到答案。

SELECT 
-- TOP 1   //to get highest order total
 s.SalesPersonID
 ,COUNT(sd.SalesOrderID) as Total_Count
 ,sum(sd.LineTotal) as orderTotal  
FROM 
  Sales.SalesOrderHeader s Inner Join Sales.SalesOrderDetail sd 
  ON s.SalesOrderID=sd.SalesOrderID 
GROUP BY s.SalesPersonID 
HAVING s.SalesPersonID IS NOT NULL
ORDER BY sum(sd.LineTotal) desc

我正在做的是,将SalesOrderHeaderSalesOrderDetail一起加入SalesOrderId并使用aggregate functions来获得所需的结果。

Order by用于获得最高价值。 Top 1用于获取所需的输出。