SQL dotaz
Michal Kubecek
mike na mk-sys.cz
Čtvrtek Srpen 22 10:43:40 CEST 2002
On Thu, Aug 22, 2002 at 06:38:27AM +0200, "Zíka Aleš, Ing." wrote:
>
> Sam jsem resil neco podobnyho - do tabulky zavodniku kazdymu ulozit
> poradi podle vysledku a neprisel jsem na nic chytrejsiho nez:
>
> UPDATE zavodnik SET poradi =
> (SELECT count(*) + 1 FROM zavodnik zav
> WHERE zavodnik.vysledek > zav.vysledek);
Nevím, co používáte, u Firebird/Interbase bych to řešil asi takhle:
create procedure OCISLUJ
as
declare variable I integer;
declare variable J integer;
begin
J = 1;
for select ID from ZAVODNIK order by VYSLEDEK into :I do begin
udpate zavodnik set PORADI=:J where ID=:I;
J = :J + 1;
end
end
U jiných databází by mělo něco podobného fungovat taky (u MS SQL
určitě, jen se ten cyklus zapisuje jinak).
> coz je ovsem dost pomaly. Na druhou stranu to elegantne resi situaci, ze
> kdyz maji dva shodny vysledek, maji take shodne poradi, coz ruzne vypisy
> stylem - vypis serazene podle vysledku a ocisluj radky neumi.
To se dá při předchozím postupu poměrně snadno vyřešit.
Michal Kubeček
Další informace o konferenci Databases