SQL Server中的窗口函数
我有一个名为Orders的表,其中的数据如下所示: EMpID OrderValue OrderID 1 100 1 2 167 89 .... 如何获得排名并按值ThisEMPID排序?首先是一些测试数据:SQL Server中的窗口函数,sql,sql-server-2005,Sql,Sql Server 2005,我有一个名为Orders的表,其中的数据如下所示: EMpID OrderValue OrderID 1 100 1 2 167 89 .... 如何获得排名并按值ThisEMPID排序?首先是一些测试数据: insert into #t values (1, 10, 100) insert into #t values (1, 20, 101) insert into #t values (2, 30, 120) insert into #t
insert into #t values (1, 10, 100)
insert into #t values (1, 20, 101)
insert into #t values (2, 30, 120)
insert into #t values (3, 10, 130)
insert into #t values (3, 10.5, 131)
insert into #t values (4, 100, 140)
您需要两个步骤,一个是获取EMPID及其合计顺序值。第二步是获得总数和排名:
; with Step1 (EmpId, ValueThisEmpId) as
(select empId, sum(OrderValue)
from #t
group by empId)
select EmpId,
rank() over(order by ValueThisEmpId desc) as "rank",
sum(ValueTHisEmpId) over() as ValueTotal,
ValueThisEmpId
from Step1
这将产生以下输出:
4 1 180.50 100.00
1 2 180.50 30.00
2 2 180.50 30.00
3 4 180.50 20.50
如果您不希望排名出现差距,请使用密集排名:
; with Step1 (EmpId, ValueThisEmpId) as
(select empId, sum(OrderValue)
from #t
group by empId)
select EmpId,
dense_rank() over(order by ValueThisEmpId desc) as "rank",
sum(ValueTHisEmpId) over() as TotalValue,
ValueThisEmpId
from Step1
我已经到达这里选择不同的EmpID,SUMval OVER作为VALUETOTAL,SUMval OVERPARTITION BY EmpID作为VALUEEMP,100/SUMvalOVER*SUMval OVERPARTITION BY EmpID作为销售百分比。OrderValues ORDER BY ValueMP DESC现在唯一缺少的是Ranking您的问题没有提到百分比。如果您有其他标准,请更新您的问题。实际上,我正在考虑添加百分比,例如某个特定员工在总销售额中所占的百分比。在你的帮助下很容易。谢谢,因为我不知道你用了什么把戏,我试了一下,结果成功了:select EmpId,dense_rank overorder by valuethismpid desc as rank,summavaluethismpid over as ValueTotal,valuethismpid from select EmpId,summal as valuethismpid from Sales.OrderValues Group by EmpId非常感谢。在我的问题中,我如何更改代码的背景色。
4 1 180.50 100.00
1 2 180.50 30.00
2 2 180.50 30.00
3 4 180.50 20.50
; with Step1 (EmpId, ValueThisEmpId) as
(select empId, sum(OrderValue)
from #t
group by empId)
select EmpId,
dense_rank() over(order by ValueThisEmpId desc) as "rank",
sum(ValueTHisEmpId) over() as TotalValue,
ValueThisEmpId
from Step1