webForumDet fria alternativet

Mycket krånglig SQL ...... 3 tabeller .....

6 svar · 213 visningar · startad av PatrikB

PatrikBMedlem sedan mars 20002 836 inlägg
#1

Hello,

skulle behöva ha lite hjälp.
Har kört fast totalt o kommer ingenstans.

Det är så att jag har 3 tabeller:

ekipage
=======
- eid (räknare PK)
- enamn (text(255))

prov
====
- pid (räknare PK)
- pdatum (datum/tid)
- pgrupp (tal)

resultat
========
- rid (räknare PK)
- rprov (tal)
- rekipage (tal)
- rpoang (tal)

Relationer:
ekipage.eid 1:N resultat.rekipage
resultat.rprov 1:N prov.pid

Det jag nu skulle vilja få fram är:
1: de fem bästa resultaten (rpoang) för varje ekipage per prov.pgrupp

Varje ekipage kan finnas från 0 --> N gånger men endast en ggn per prov.

2: Sorteringen ska vara enligt följande
- prov.pgrupp ASC
- resultat.rpoang DESC
- ekipage.enamn ASC

Som sagt, har setat och kört fast, stirrat mig blind så nu sätter jag hoppet till stjärnorna här i SQL forumet.

[r]
skulle kanske säga att det är en Access 2k databas-fil
[/r]

cya,
PatrikB

------------------
'## -- second place is the first looser -- ##'

[Redigerat av PatrikB den 07 dec 2001]

[Redigerat av PatrikB den 07 dec 2001]

LarsGMedlem sedan dec. 200012 464 inlägg
#2
select * from (
select (select count(*) from resultat 
         where rpoang > r.poang
           and rprov = r.rprov
           and rekipage = r.rekipage) + 1 as rank,
       e.enamn ,p.pgrupp,r.rpoang
  from resultat as r,
       ekipage as e,
       prov as p
 where e.eid = r.ekipage
   and r.rprov = p.pid ) as s
where rank <= 5
order by pgrupp asc,
         rpoang desc,
         enamn asc

------------------
essentitia preter non sans multiplicandum

PatrikBMedlem sedan mars 20002 836 inlägg
#3

Tyvärr .... den funka inte.
Felmess:
Microsoft JET Database Engine fel '80004005'

Frågan är för komplex.

:(

e ju sketna access vet du .... kan ju inte vara såååå komplexa ;)

cya,
PatrikB

------------------
'## -- second place is the first looser -- ##'

LarsGMedlem sedan dec. 200012 464 inlägg
#4

Jaha, om du definerar en vy för den inre selecten då

create view s as
select (select count(*) from resultat 
where rpoang > r.poang
and rprov = r.rprov
and rekipage = r.rekipage) + 1 as rank,
e.enamn ,p.pgrupp,r.rpoang
from resultat as r,
ekipage as e,
prov as p
where e.eid = r.ekipage
and r.rprov = p.pid

och sedan

select * from s
where rank <= 5
order by pgrupp asc,
rpoang desc,
enamn asc

vet inte om det hjälper.

------------------
essentitia preter non sans multiplicandum

PatrikBMedlem sedan mars 20002 836 inlägg
#5

Thanx igen,

ska kika på den under helgen .... om man får ngn tid över vill säga ;e

Hör av mig huruvida det funkar eller ej...

cya,
PatrikB

------------------
'## -- second place is the first looser -- ##'

PatrikBMedlem sedan mars 20002 836 inlägg
#6

.... o så kan man inte slita sig från "kodning" utan man måste ju bara "testa lite granna".
Då uppkom detta fel:
Microsoft JET Database Engine fel '80004005'

Ogiltig SQL-syntax - förväntade ett visningsnamn.

sååå, accessen fortsätter att "konstra" och vill inte ta view .....

Får kanske lösa det med logik i koden ... fast vill ju helst slippa det då det kan vara "ett par st" ekipage :e

cya,
PatrikB

------------------
'## -- second place is the first looser -- ##'

PatrikBMedlem sedan mars 20002 836 inlägg
#7

jag har lekt lite mer och har nu fått fram fram en extra tabell (använde select into statement istället) och med anrop till den fått bra prestanda. Visningar med view va ingen höjdare ;e

MEN!! (alltid är det något) jag får inte till det som jag vill.
Tabellen ser ut så här och skapas dynamiskt när fler resultat har lagts till i andra tabeller.

tblAretsHund
- ahForare [text]
- ahHund [text]
- ahKlubb [text]
- ahPoang [tal (kan ta decimaltal)]
- ahGrupp [tal]
- ahDatum [datum/tid]

det jag vill få fram är:

1. Top 10 av förarnas medelpoäng från deras 5 bästa tävlingsresultat (poäng) från respektive grupp.
Om föraren ej har 5 resultat ska summan ändå delas med 5.
Om föraren har mer än 5 tävlingar så ska endast de 5 bästa tas med.

2. De fem bästa resultaten ska oxå visas tillsammans med medelpoängen.
Om föraren ej har 5 tävlingar så ska de poängen som fattas visa 0

Går det att få till en sql-fråga för ovanstående eller kanske är det bästa att lösa detta med logik i koden fast .... då kommer prestandan att suga då det kan vara x antal tusen förare i databasen =(

cya,
PatrikB

------------------
'## -- second place is the first looser -- ##'

[Redigerat av PatrikB den 08 dec 2001]

140 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)