當前位置:首頁 » 編程語言 » sqlserver排名函數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sqlserver排名函數

發布時間: 2022-11-29 10:25:15

A. (sql SERVER)SQL 語句計算多列排名,如題:

with tt as(
select '88' A1,'9' A2
union all
select '55' A1,'9' A2
union all
select '55' A1,'4' A2
union all
select '99' A1,'4' A2
union all
select '99' A1,'1' A2
)
select A1,DENSE_RANK() OVER(ORDER BY A1 desc) as A_1,A2,DENSE_RANK() OVER(ORDER BY A2 desc) as A_2 from tt
select A1,RANK() OVER(ORDER BY A1 desc) as A_1,A2,RANK() OVER(ORDER BY A2 desc) as A_2 from tt

B. 如何用sql語句(sqlserver2000)進行每頁顯示10條記錄,查詢下一頁不顯示上一頁的10條記錄。

就是一個分頁儲過程
如有表TUser ,主鍵為ID,欄位就FName
mssql2000用top n 或 臨時表分頁 mssql2005可以用row_number()排名函數
--每頁顯示10條記錄
--TOP N 實現分頁
--現在取第一頁 記錄 也就是 前10
SELECT TOP 10 *
FROM TUser
WHERE ID NOT IN ( SELECT TOP 10*0 ID FROM TA)
--然後取第二頁 記錄 也就是 除了前10條記錄的所有記錄的前10條(序號11-20的記錄)
SELECT TOP 10 *
FROM TUser
WHERE ID NOT IN ( SELECT TOP 10*1 ID FROM TA)
--第3頁就將 NOT IN 後面的 10*1 改成10*2

--臨時表分頁
自己找點資料吧
其實原理就在於 每條數據必需有一個有循序的ID
然後根據這個ID 取得數據所在的范圍就實現分頁了

C. SqlServer函數

sql
server中默認的date\time
時間格式是「2013-10-31
13:30:10.153
」,如果你想裝換成字元串「20131031133010153」
你可以用下面query去轉換如果時間格式是"2013-10-31
13:30:10.153
":
declare
@date
datetime;
set
@date
=
'2013-10-31
13:30:10.153';
select
convert(varchar(8),
@date,
112)
+
replace(convert(varchar(12),
@date,
114),
':',
'')
as
resul

D. 問個關於sqlserver中select...order by..的問題

selectidentity(int,1,1)time(創建遞增列),其他列1,其他列2into#t(創建臨時表t,#類似關鍵字)from表名orderbytimedesc

select*from#twheretime=5

原理:將結果集重新排列,time列存儲的就是排序後的列號,所以需要第五個,只要在where子句中寫time=5就可以了。

給分呀嘿嘿

為了分,給你貼個圖

selectidentity(int,1,1)as(得有as)rownum,branchname,fatheridinto#tmpfromNews_Branchorderbyiddesc

select*from#tmpwhererownum=5

E. SqlServer函數的排名函數

row_number 無參數
為結果集內每一行進行編號,從1開始後面行依次加1,常用於產生序號;
例如:select row_number() over(order by userid desc) as [NO],username,password from T_USER

F. (sqlserver)表中有個a是隨機1到10的數字,現在要查詢出以下東西

select a,count(a) 次數
from 表
group by a
order by count(a) desc

--如果你這是sql2005就用
row_num() over() 來處理名次。但我這沒環境也沒試

--下面這是另種方法
declare @t table(a int,b int,c int identity(1,1))
insert into @t(a,b)
select a,count(a) 次數
from 表
group by a
order by count(a) desc
select * from @t

G. sqlserver查詢張三每門課的成績排名

這里userid設置為1001,這里先統計每名課程成績大於張三成績的學生數,然後在統計的數上加1即為張三的排名。這里是mysql的測試,如需在oracle上使用,請把IFNULL函數換成oracle的NVL函數。根據tab後面的數字閱讀會清楚一點,可以一個一個tab先執行看結果。
select tab4.kcid,IFNULL((select tab5.kcrank from (select tab3.kcid as kcid,count(*) as kcrank from (select tab2.* from chengji tab2 , (select * from chengji where userid=1001) tab1 where tab2.kcid=tab1.kcid and tab2.cj > tab1.cj) tab3 group by tab3.kcid) tab5 where tab4.kcid=tab5.kcid),0)+1 as kcrank from chengji tab4 where tab4.userid=1001

H. 分數一樣的話排名怎麼排,求詳細的sql語句。

select * from 表名 order by SCORE asc/desc,如果分數一樣,就是按照原本的上下位置的,因為這個是棧空間處理,後進先出

I. sql server 2000 的數據行列轉換問題

靜態sql

select
max(case when a=1 then a end) as a,
max(case when a=3 then a end) as b
from [table]
union all
select
max(case when b=2 then b end) as a,
max(case when b=2 then b end) as b
from [table]
union all
select
max(case when c=3 then c end) as a,
max(case when c=1 then c end) as b
from [table]
動態SQL
declare @sql varchar(2500)
select @sql='select '
select @sql =@sql+'
max(case when a='+Convert(varchar(10),a)+' then a end) as ['+Convert(varchar(10),type)+'],'
from
(
select ROW_NUMBER() OVER (ORDER BY a) as type, a,b,c from [table]
) as p
select @sql=substring(@sql,0,len(@sql))
select @sql=@sql+' from [table] union all select '

select @sql =@sql+'
max(case when b='+Convert(varchar(10),b)+' then b end) as ['+Convert(varchar(10),type)+'],'
from
(
select ROW_NUMBER() OVER (ORDER BY a) as type, a,b,c from [table]
) as p
select @sql=substring(@sql,0,len(@sql))
select @sql=@sql+' from [table] union all select '

select @sql =@sql+'
max(case when c='+Convert(varchar(10),c)+' then c end) as ['+Convert(varchar(10),type)+'],'
from
(
select ROW_NUMBER() OVER (ORDER BY a) as type, a,b,c from [table]
) as p
select @sql=substring(@sql,0,len(@sql))
select @sql=@sql+' from [table] '
print @sql

exec(@sql)

ROW_NUMBER 是排名函數 SQLServer2005 里的,如果2000沒有 就要將表裡面多加一個欄位用來存放每一行的列名。

J. SQLserver里怎麼用rank()函數實現兩個條件的排序

C1公式
=SUMPRODUCT(N($A$1:$A$4+$B$1:$B$4*0.001>=A1+B1*0.001))
下拉填充

如果數據不止4行,相應改一下。
注意後半部分的A1、B1單元專格的部分用相對引用屬,其他的$A$1:$A$4、$B$1:$B$4單元格區域的部分用絕對引用