+ -
当前位置:首页 → 问答吧 → 如何排名,并获取名次

如何排名,并获取名次

时间:2011-12-26

来源:互联网

SQL code

select UName,  

RANK()  over(  ltrim(sum(case Violation when '1' then 1 when '2' then 1 else 0 end)*100/count(1))+'%') as tongguo

from

  UQD
group by 

  UName




可是提示'RANK' 不是可以识别的 函数名。
我想实现根据ltrim(sum(case Violation when '1' then 1 when '2' then 1 else 0 end)*100/count(1))+'%'排名并且把名次放到查询的表里

作者: LiveMusic   发布时间: 2011-12-26

你的是2000?

作者: fredrickhu   发布时间: 2011-12-26

你的数据库是什么版本
rank是2005、2008的

作者: pengxuan   发布时间: 2011-12-26

SQL code
--示例数据
CREATE TABLE tb(Name varchar(10),Score decimal(10,2))
INSERT tb SELECT 'aa',99
UNION ALL SELECT 'bb',56
UNION ALL SELECT 'cc',56
UNION ALL SELECT 'dd',77
UNION ALL SELECT 'ee',78
UNION ALL SELECT 'ff',76
UNION ALL SELECT 'gg',78
UNION ALL SELECT 'ff',50
GO

--1. 名次生成方式1,Score重复时合并名次
SELECT *,Place=(SELECT COUNT(DISTINCT Score) FROM tb WHERE Score>=a.Score)
FROM tb a
ORDER BY Place
/*--结果
Name       Score        Place 
---------------- ----------------- ----------- 
aa         99.00        1
ee         78.00        2
gg         78.00        2
dd         77.00        3
ff         76.00        4
bb         56.00        5
cc         56.00        5
ff         50.00        6
--*/



--2. 名次生成方式2,Score重复时保留名次空缺
SELECT *,Place=(SELECT COUNT(Score) FROM tb WHERE Score>a.Score)+1
FROM tb a
ORDER BY Place
/*--结果
Name       Score        Place 
--------------- ----------------- ----------- 
aa         99.00        1
ee         78.00        2
gg         78.00        2
dd         77.00        4
ff         76.00        5
bb         56.00        6
cc         56.00        6
ff         50.00        8
--*/


2000的参考这个

作者: fredrickhu   发布时间: 2011-12-26

该回复于2011-12-26 09:24:01被管理员删除

  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • LiveMusic
  • (排斥一门语言,不如学习它)
  • 等 级:
#5楼 得分:0回复于:2011-12-26 09:16:56
我是2005的啊

作者: lhk_software   发布时间: 2011-12-26

SQL code
SELECT  UName ,
        RANK() OVER ( ORDER BY LTRIM(SUM(CASE Violation
                                           WHEN '1' THEN 1
                                           WHEN '2' THEN 1
                                           ELSE 0
                                         END) * 100 / COUNT(1)) + '%' ) AS tongguo
FROM    UQD
GROUP BY UName

作者: LiveMusic   发布时间: 2011-12-26

那估计是你的机器上安装了2000 你连接到2000的实例上去了

作者: wufeng4552   发布时间: 2011-12-26

引用 6 楼 wufeng4552 的回复:
SQL code
SELECT UName ,
RANK() OVER ( ORDER BY LTRIM(SUM(CASE Violation
WHEN '1' THEN 1
WHEN '2' THEN……



木有注意楼主连ORDER BY都木有。

作者: fredrickhu   发布时间: 2011-12-26

引用 5 楼 livemusic 的回复:

我是2005的啊


SQL code
select UName,  

RANK()  over(order by  ltrim(sum(case Violation when '1' then 1 when '2' then 1 else 0 end)*100/count(1))+'%') as tongguo

from

  UQD
group by 

  UName

作者: fredrickhu   发布时间: 2011-12-26

怎么会提示rank函数呢 只有2005以后才出现的呀

作者: qianjin036a   发布时间: 2011-12-26

引用 1 楼 fredrickhu 的回复:
你的是2000?
找到原因了,远程的数据库真的是2000的····

2000的怎么查呢

作者: ericlanmo   发布时间: 2011-12-26