如何将查询结果进行排名

前端时间在做一个售票员销售业绩排行的时候,写出来了,后来领导说加上名次上去好看些

于是乎我就开始写,嘿,奇怪,我还真没有写过,于是找了写资料,借鉴了一下别人的,结果如下

CREATE PROCEDURE csp_GetOperatorScoreByDate
  @BeginDate DATETIME,@EndDate DATETIME
AS
CREATE TABLE #Temp //定义临时表,三个显示字段
(
  Employee varchar(50),//销售人员的名字
  TotalTicket int,//总票数
  TotalTradeSum money//总销售额
)

INSERT INTO #Temp 
SELECT A.RealName AS Employee,
TotalTicket=(SELECT COUNT(*) FROM Tickets WHERE DATEDIFF(DD,@BeginDate,OrderTime)>=0 
AND DATEDIFF(DD,OrderTime,@EndDate)>=0 AND Operator_Id1=A.Id AND State<>4), 
CASE WHEN (SELECT SUM(Price) FROM Tickets WHERE DATEDIFF(DD,@BeginDate,OrderTime)>=0 
AND DATEDIFF(DD,OrderTime,@EndDate )>=0 AND Operator_Id1=A.Id AND State<>4) IS NULL THEN 0 
ELSE (SELECT SUM(Price) FROM Tickets WHERE DATEDIFF(DD,@BeginDate,OrderTime)>=0 AND DATEDIFF(DD,OrderTime,@EndDate)>=0 
AND Operator_Id1=A.Id AND State<>4) END AS TotalTradeSum FROM Operators A  
WHERE A.Kind=1 OR A.Kind=3 GROUP BY A.RealName,A.ID ORDER BY TotalTicket DESC

//这段代码呢 有点长,也有点意思,不必去看怎么得到的字段,但是里面还是有些东西可以值得一看所以也就贴出来了,现在写存储过程没有注意过效率,慢慢来。

//一下就是实现名次了,之所以使用临时表,就是为了将需要的字段放到一个临时表中,便于简单操作
SELECT Employee,TotalTicket,TotalTradeSum,
(SELECT COUNT(*)+1 AS [Order] FROM #Temp B WHERE B.TotalTicket > A.TotalTicket) AS [Order] FROM #Temp A 
ORDER BY TotalTicket DESC

好 关键的句子来了,SELECT COUNT(*)+1 AS [Order] FROM #Temp B WHERE B.TotalTicket > A.TotalTicket,这句语句我曾经开始的时候也不是很懂,就是我们群里开始问,结果很多人还是解释不清楚,结果另一个群的一个人给我说喊我考虑成循环来理解,我就想了想,原来是将同一个表考虑成两个表将字段的值来进行一次比较,并对符合条件的结果查询出来——COUNT(*)+1,此处的加1是为了避免第一名的序号为零。
好,完了
posted @   大侠酷裤马路  阅读(204)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
点击右上角即可分享
微信分享提示