SQL Server中的窗口函数

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

我有一个名为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 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