於是乎我就開始寫,嘿,奇怪,我還真沒有寫過,於是找了寫資料,借鑑了一下別人的,結果如下
create procedure csp_getoperatorscorebydate
@begindate datetime,@enddate datetime
ascreate 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是為了避免第一名的序號為零。
好,完了
oracle對查詢結果進行排名
要解決的問題 我們想對查詢出來的資料進行排名統計,但又不想在源資料中插入相應的字段。解決方法 color red 以oracle中scott使用者下的emp表為例演示 color 對所有員工的工資進行統計排名,查詢語句如下 select empno,sal,color red rank over o...
如何將介面進行限流
採用計數器實現限流有點簡單粗暴,一般我們會限 制一秒鐘的能夠通過的請求數,比如限流qps為100,演算法的實現思路就是從第乙個請求進來開始計時,在接下去的1s內,每來乙個請求,就把計數加1,如果累加的數字達到了100,那麼後續的請求就會被全部拒絕。等到1s結束後,把計數恢復成0,重新開始計數。具體的...
MSSQL如何將查詢結果拼接成字串
在博問上看到乙個提問 mssql如何將查詢結果拼接成字串 想了一下應該怎麼實現呢,在c 等語言下好實現,但在sql裡實現 還真沒做過。目標 想要在sql中將查詢的結果拼接為 1 2 3 4 5 分析 要進行拼接就要取得每行的值,想到了游標可以做到。於是有了下面的方法 select name from...