Det är svårt (jag tror inte att det går) att få ihop med en sql-sats.
Man får nog snickra ihop en procedur och då gjorde jag det.
Den förusätter att man har en tabell, js
create table js(namn char(12),ort char(12),p int,tp int,primary key (namn))
Det är den som innehåller grunddatat.
p=poäng
tp = tidigare poäng
Skriptet skapar en tabell som inneåller två kolumner till, en för nuvarande rankning och en för tidigare
create table jst(namn char(12),ort char(12),p int,tp int, rank int,trank int)
create procedure jsort as
begin
declare @rank int
declare @p,@a int
declare a cursor for select p,count(*) from js group by p order by p desc
declare b cursor for select tp,count(*) from js group by tp order by tp desc
insert into jst select namn,ort,p,tp,0,0 from js
set @rank = 1
open a
fetch a into @p,@a
while ( @@fetch_status = 0 )
begin
update jst set rank = @rank where p = @p
set @rank = @rank + @a
fetch a into @p,@a
end
close a
set @rank = 1
open b
fetch b into @p,@a
while ( @@fetch_status = 0 )
begin
update jst set trank = @rank where tp = @p
set @rank = @rank + @a
fetch b into @p,@a
end
close b
Om två eller flera har samma poäng så delar de plats.
Efter att du har anropat proceduren så kan du bara selecta från tabellen jst.
(Jag skrev och testade detta med en dbms som använder standard-SQL för stored procedures och inte T-sql. Jag gjorde en otestad översättning från PSM till T-SQL då jag inte har någon SQL server lätt tillgänglig.)
------------------
essentitia preter non sans multiplicandum