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