当前位置:首页 » 编程语言 » 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单元格区域的部分用绝对引用