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
SELECT
COUNT
(
DISTINCT
Score)
FROM
tb
WHERE
Score>=a.Score)
这句语句 有谁能帮帮我吗每次 查询 比当条 积分大的或者等于的记录数,如果是 sql 2005,可以直接使用排名函数,更好理解
SELECT
*,Place=DENSE_RANK() OVER(ORDER BY score DESC)
FROM
tb a
ORDER
BY
Place
额,就是查score的重复次数条件是Score>=a.score
COUNT
(
DISTINCT
Score)
:DISTINCT
Score
取出重复的Score
一起就表示去除重复Score的个数
最终结果赋值给Place
明白了吧
每条记录的tatalScore列与整体列totalScore比较;
一次比较就会得出一条或多条记录,如果是一条记录就表示是第一名,
二条记录就表示是第二名,..........
但是会遇到重复数据,所以就加个DISTNCT 来抑制重复。