我的任务: 编写一个根据分配给客户的订单数量对销售人员进行排名的查询。 我的查询:
select C.SalesPerson,
count(SOH.SalesOrderID) over (partition by C.SalesPerson) as SalesCount,
rank() over (order by count(SOH.SalesOrderID)) as [Rank]
from SalesLT.Customer as C
inner join SalesLT.SalesOrderHeader as SOH on C.CustomerID = SOH.CustomerID
group by
C.SalesPerson
order by
rank;
eRr: 列saleslt.salesorder.salesorderID'在选择列表中无效,因为它不包含在汇总函数中或组中的组中。
为什么出现错误?
为什么不能在这条代码中使用分区。
count(SOH.SalesOrderID) over (partition by C.SalesPerson) as SalesCount,
SalesCount
中,您要求它做一个非零值的窗口计数。但是窗口功能是执行后分组和正常聚合,因此不再存在
SalesOrderID
SalesOrderID
/FROM
/JOIN
APPLY
WHERE
GROUP BY
HAVING
(窗口函数)
OVER
SELECT
DISTINCT
/
TOP
理论上您可以使用:
OFFSET
其他单词:要求批量计数,然后进行窗口的总和。
sum(count(SOH.SalesOrderID)) over (partition by C.SalesPerson) as SalesCount,
分组,因此该分区始终是一行。所以你最好只是做
C.SalesPerson
count(SOH.SalesOrderID) as SalesCount,
可能不是无效的,所以要做的是同一件事
SalesOrderID
to也同样的是 count(*) as SalesCount,
。
因此,您的查询可以简化为
order by rank