我正在使用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
答案 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
我正在做的是,将SalesOrderHeader
与SalesOrderDetail
一起加入SalesOrderId
并使用aggregate functions来获得所需的结果。
Order by
用于获得最高价值。 Top 1
用于获取所需的输出。