zoukankan      html  css  js  c++  java
  • 如何将查询结果进行排名

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

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

    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是为了避免第一名的序号为零。
    好,完了
  • 相关阅读:
    kettle Switch / Case Verification fails on working Tranfsormation
    KETTLE 并行任务设置
    查看ORACLE各表空间使用情况
    KETTLE使用小记
    ORACLE IMP三种模式
    倒腾ORACLE小记
    KETTLE xls表格导入
    绕点旋转(老问题)
    TransformToolControl.as
    钻石恒久远,一颗永流传
  • 原文地址:https://www.cnblogs.com/tzy080112/p/1388889.html
Copyright © 2011-2022 走看看