34,590
社区成员
发帖
与我相关
我的任务
分享
select * , sort = (select count(1) from tb where station = t.station and temp > t.temp) + 1 from tb t
SELECT *
,
(SELECT COUNT(*)
FROM (SELECT *
FROM (SELECT cast(AVG(cast(t1.maxtemp AS decimal(10, 2)))
AS decimal(10, 2)) AS 日最高气温, t1.stationnum AS 区站号,
2006 AS 年
FROM (SELECT MAX(maxtemp) AS maxtemp,
substring(ObservTimes, 1, 8) AS ObservTimes,
stationnum
FROM tabTimeData
WHERE (ObservTimes >= @st) AND
(ObservTimes <= @et) AND
(maxtemp NOT LIKE '%/%')
GROUP BY substring(ObservTimes, 1, 8), stationnum)
t1
GROUP BY t1.stationnum) t2
UNION
SELECT AVG(日最高气温) AS 日最高气温, 区站号, 年
FROM [day]
WHERE 月 >= @smonth AND 月 <= @emonth AND 日 >= @sday AND 日 <= @eday
GROUP BY 区站号, 年) B
WHERE a.区站号 = b.区站号 AND B.日最高气温 > A.日最高气温)
+ 1 AS 历史排名
FROM (SELECT *
FROM (SELECT cast(AVG(cast(t1.maxtemp AS decimal(10, 2))) AS decimal(10, 2))
AS 日最高气温, t1.stationnum AS 区站号, 2006 AS 年
FROM (SELECT MAX(maxtemp) AS maxtemp, substring(ObservTimes, 1, 8)
AS ObservTimes, stationnum
FROM tabTimeData
WHERE (ObservTimes >= @st) AND
(ObservTimes <= @et) AND
(maxtemp NOT LIKE '%/%')
GROUP BY substring(ObservTimes, 1, 8), stationnum) t1
GROUP BY t1.stationnum) t2
UNION
SELECT AVG(日最高气温) AS 日最高气温, 区站号, 年
FROM [day]
WHERE 月 >= @smonth AND 月 <= @emonth AND 日 >= @sday AND 日 <= @eday
GROUP BY 区站号, 年) A
WHERE (年 = @eyear)
ORDER BY 区站号, 年
2000好像只能这样
select *,
(select count(1) from T where Station=a.Station and Temp!> a.Temp) as sort
from
T a
2005这样
select
*,
row_number()over(partition by Station order by Temp desc) as sort
from
T
--示例数据
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
--*/
select *,sort=(select count(1) from 表名 where station=a.station and temp>a.temp)+1
from 表名 a