• 如何将查询结果进行排名


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

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

    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是为了避免第一名的序号为零。
    好,完了
  • 相关阅读:
    redis的常用命令及php-redis的使用
    mysql数据库基本操作
    php接口数据安全解决方案
    如何防止api接口被恶意调用或攻击
    virtualBox安装及调试
    PHP常用扩展
    memcached安装与应用
    Jmeter的基础使用(4)——添加服务器的监控
    Jmeter的基础使用(3)——使用实操
    Jmeter的基础使用(2)——线程的添加以及基本使用
  • 原文地址:https://www.cnblogs.com/tzy080112/p/1388889.html
Copyright © 2020-2023  润新知