06. juli 2005 - 15:01Der er
13 kommentarer og 1 løsning
Forespørgsel med max. antal fra en bestemt tabel
Jeg har en masse data i en tabel med 4 felter. Felt1=navn Felt2=rækkeID (indeholder data med et tal fra 1-30) Felt3=dreng/pige Felt4=point
Jeg har behov for at få følgende udtræk: Jeg skal have fundet de 10 bedste navne (dem med flest point) Der må max. være 3 fra hver række uanset om det er dreng/pige Der skal være 6 drenge og 4 piger
Okay...jeg har en tabel med følgende felter: Felt1=navn Felt2=rækkeID (indeholder data med et tal fra 1-30) Felt3=dreng eller pige Felt4=point
Følgende er data: Felt1 Felt2 Felt3 Felt4 test1 1 d 205 test1 2 d 143 test1 2 d 54 test1 1 p 98 test1 3 d 132 test1 1 p 176 test1 4 d 199 test1 4 p 43 test1 3 p 23 test1 2 d 76 test1 2 p 125 test1 3 d 200 test1 3 p 148 test1 3 d 122 test1 1 d 99 test1 4 p 75 test1 2 d 187 test1 3 p 145 test1 1 p 65 test1 4 d 98 test1 1 d 158
Herfra skal jeg har lavet en forspørgsel som indeholde 10 navne hvoraf: 6 dreng/pige=d fra felt3 4 dreng/pige=p fra felt3 Ud af de 10 navne må der max være 3 fra hver rækkeID fra felt2. Der skal findes de 10 navne som overholder ovennævnte krav samt at de skal have det højeste antal point.
This is just a VERY wild guess, and it will very likley need some changes.
You will need a TEMP table to contain those you choose. Also I am assuming that felt1 (navn) is a unique key (primary key)
make a select on the original table sorting by felt4 (point) desc (descending) so that you get the highest first. Now you have a recordset which you can loop through taking one record at a time and adding it to the TEMP table.
Before you add it to the TEMP table you have to make sure that.
1: It doesnt already exist. 2: There are less than 6 boys (if the record you want to add is a boy) 3: There are less than 4 girls (if the record you want to add is a girl) 4: There are less than 3 records with the same "rækkeID" (felt2) 5: There are less than 10 records. (if not then you are finished.
So for each of the 5 points above you will need to make a select to see if you can or can not add the record, and in the case of 5, finish.
Det ser lidt kringlet ud.... Faktisk tror jeg ikke det kan lade sig gøre, for hvad nu hvis de 3 bedste drenge og den bedste pige er i samme række, hvem skal så snydes?~) Når man holder sådan nogle arrangementer, så skal der en person til at afgøre hvad er mest retfærdigt, det kan man ikke få et program til!~) (eller kan man...)
Hvis du ikke få en eller anden super sql udleveret, så kan du måske bruge følgende fremgangsmåde:
* Du tilføjer et ja/nej felt i din tabel. * Du laver en vindertabel med navn, dreng/pige og point * Når stævnet er færdigt, så åbner du en formular. På denne formular har du en liste for drengene og en for pigerne, dem med højest point står øverst. * Derudover har du en liste for hver række, med plads til 3 poster. Forespørgslen til kilden laves ud fra vindertabellen * Når du så dobbeltklikker på en af listerne for enten drenge eller piger, så kør nogle forespørgsler (eller hvordan du nu foretrækker det), som: 1. Sætter postens ja/nej felt til ja 2. skriver posten i vindertabellen 3. opdaterer listerne * I listerne for de enkelte rækker, skal man kunne dobbeltklikke for den modsatte effekt, så man kan fjerne et navn igen * Du kan så lave en summeringsfelt for piger og et for drenge, for at holde øje med fordelingen. Fordelingen på rækker kan jo ses rent fysisk
Med de sportsligste hilsner!~)
Synes godt om
Slettet bruger
07. juli 2005 - 11:13#9
Det med ja/nej feltet er selvfølgelig for at kunne fjerne personen fra drenge eller pige listen, så du ikke vælger den samme 2 gange.
spg> Jeg har fulgt terrys råd og det virker. Jeg får det resultat som jeg skal have. Turneringen foregår således, at man kan oprette sig som manager. Som manager kan man lave en masse hold. Hvert hold skal bestå af 10 spillere heraf 6 drenge og 4 piger med kun max. 3 fra hver række(årgang). Den liste på 10 spillere jeg skal have i det her udtræk er det bedste hold der kan laves overhovedet...holdet skal jo også overholde reglerne, så der er ingen der bliver snydt.
SQLslet = "DELETE * FROM TEMP" Conn.Execute(SQLslet)
SQL = "SELECT Tabel.[navn], Tabel.[raekke], Tabel.[sex], Tabel.[point] FROM TABEL ORDER BY Tabel.[point] DESC;" Set rs = Conn.Execute(SQL)
'response.write "<table>"
if not rs.BOF AND NOT rs.EOF then rs.movefirst
Do while not rs.eof navn=rs("navn") raekkeID=rs("raekke") sex=rs("sex") point=rs("point")
'Tæller antal navne i række SQL4 = "SELECT Count(raekke) as Araekke FROM TEMP WHERE raekke="&raekkeID set rsAraekke = conn.Execute(SQL4) Araekke = rsAraekke("Araekke")+1
If Aspillere<antal then If sex="d" then If Adrenge<drenge then If Araekke<=raekke then
SQL = "INSERT INTO TEMP (navn,raekke,sex,point) VALUES ('" & navn & "','" & raekkeID & "','" & sex & "','" & point & "')" conn.Execute(SQL)
'Tæller antal drenge test="d" SQL2 = "SELECT Count(sex) as Adrenge FROM TEMP WHERE sex='"&test&"'" set rsAdrenge = conn.Execute(SQL2) Adrenge = rsAdrenge("Adrenge")
'Tæller antal piger test="p" SQL3 = "SELECT Count(sex) as Apiger FROM TEMP WHERE sex='"&test&"'" set rsApiger = conn.Execute(SQL3) Apiger = rsApiger("Apiger")
'Tæller antal spillere SQL1 = "SELECT Count(navn) as Aspillere FROM TEMP" set rsAspillere = conn.Execute(SQL1) Aspillere = rsAspillere("Aspillere")
topholdet = topholdet & "<tr><td><font size=2 face=arial>" & navn & "</font></td><td><font size=2 face=arial> - " & raekkeID & "</font></td><td><font size=2 face=arial> - " & sex & "</font></td><td><font size=2 face=arial> - " & point & "</font></td></tr>" end if end if end if
if sex="p" then IF Apiger<piger then If Araekke<=raekke then
SQL = "INSERT INTO TEMP (navn,raekke,sex,point) VALUES ('" & navn & "','" & raekkeID & "','" & sex & "','" & point & "')" conn.Execute(SQL)
'Tæller antal drenge test="d" SQL2 = "SELECT Count(sex) as Adrenge FROM TEMP WHERE sex='"&test&"'" set rsAdrenge = conn.Execute(SQL2) Adrenge = rsAdrenge("Adrenge")
'Tæller antal piger test="p" SQL3 = "SELECT Count(sex) as Apiger FROM TEMP WHERE sex='"&test&"'" set rsApiger = conn.Execute(SQL3) Apiger = rsApiger("Apiger")
'Tæller antal spillere SQL1 = "SELECT Count(navn) as Aspillere FROM TEMP" set rsAspillere = conn.Execute(SQL1) Aspillere = rsAspillere("Aspillere")
topholdet = topholdet & "<tr><td><font size=2 face=arial>" & navn & "</font></td><td><font size=2 face=arial> - " & raekkeID & "</font></td><td><font size=2 face=arial> - " & sex & "</font></td><td><font size=2 face=arial> - " & point & "</font></td></tr>" end if end if end if end if rs.movenext loop
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.