Først skal vi sørge for at have en tabel, så vi kan arbejde med tallene på en mere hensigtsmæssig måde. Tabellen skal se således ud: PERSON, KOLONNE, RESULTAT. Vi kalder tabellen for resultat2.
Når vi har denne tabel kan vi udføre følgende steps for at få det ønskede resultat frem:
Step1 (nulstil tabel) DELETE resultat2
Step2 (overfør data) INSERT INTO resultater2 SELECT person, 1, resultat1 FROM resultater UNION SELECT person, 2, resultat2 FROM resultater UNION SELECT person, 3, resultat3 FROM resultater UNION SELECT person, 4, resultat4 FROM resultater
Step 3 (Udvælg data) SELECT person, MAX(ra.resultat), ( SELECT TOP 1 rb.kolonne FROM resultater2 rb WHERE ra.person = rb.person AND rb.resultat = MAX(ra.resultat) ) FROM resultater2 ra GROUP BY person
Følgende SQl virker i Access, og giver største resultat og navnet på kolonnen som kolonner i resultatsættet. functionen IIF er vidst specifik for Access, og kan hedde noget andet på andre db'er.
objRec.Open sql, objConn, 1,3 IF not objRec.EOF THEN Response.Write objRec"PERSON" & "<BR>" Response.Write objRec"KOLONNE" & "<BR>" Response.Write objRec"RESULTAT" & "<BR>" End if set objRec = nothing set objConn = nothing
Tabel "resultater" ser sådan ud person kolonne1 kolonne2 kolonne3 kolonne4 Hans 5 10 15 20 Birthe 10 15 20 5 Amanda 15 20 5 10 Ingeborg 20 5 10 15
Tabel "resultat" ser sådan ud uden værdier PERSON KOLONNE RESULTAT
Resultatet burde blive Hans kollone4 20 Birthe kolonne3 20 Amanda kolonne2 20 Ingeborg kolonne1 20
Set objRec = Server.CreateObject("ADODB.RecordSet") sql = "INSERT INTO resultat2 (person, kolonne, resultat) " &_ "SELECT person, 1, resultat1 FROM resultater " &_ "UNION " &_ "SELECT person, 2, resultat2 FROM resultater " &_ "UNION " &_ "SELECT person, 3, resultat3 FROM resultater " &_ "UNION " &_ "SELECT person, 4, resultat4 FROM resultater " objRec.Open sql, objConn, 1,3 (LiNIE 26 i fejlmeldelsen) set objRec = nothing
og fik følgende resultat
Microsoft JET Database Engine error '80040e14'
Syntax error in FROM clause.
/resultat/resultat.asp, line 26
Er det rigtigt forstået at "SELECT person, 1, resultat1 FROM resultater" skal tage værdierne fra den oprindelig tabel og kopier det over i "resultat2". Jeg har prøvet at ændre det til "SELECT person, kolonne1, kolonne2 FROM resultater", men det virker heller ikke
Det fungerer helt uden fejlmeldinger. Det er dog blevet mere kompliceret end jeg kan finde ud af bruge det.
Så 2 spørgsmål: 1 spørgsmål Det helt elementære - hvor er resultatet? Jeg har prøvet fra rs("person") til forskelllige kombinationer af ra.kolonne, uden at finde et resultat.
2 spørgsmål Vil du ikke sætte lidt tekst på, hvad der sker i de forskellige linier i step 3 for jeg vil meget gerne lære det. Jeg forstår ikke helt betydningen af ra, rb og rc. Eller hvis du kender et sted, hvor jeg kan læse lidt mere om det - jeg kan nemlig bedst lide, at jeg forstår de koder, som jeg bruger til fulde.
Ad 2 ------------------------- Der er en par indlejrede SQL-sætninger, så jeg kan godt forstå den er lidt svær at overskue. Det der gør den besværlig er at vi udover person og resultat også skal have nummeret på den kolonne, der indeholder resultatet.
Jeg ved ikke om jeg kan forklare det, men jeg kan da prøve.
Vi selecter først person og max(resultat) fra tabellen (ra). Der er nogenlunde nemt at gå til.
Dernæst skal vi have selectet den tilhørende kolonne. Det gør vi ved at lave en ny select på samme tabel (rb), hvor person er lig med personen fra første select (ra), og resultat er lig med max(resultat) for personen.
Max(resultat) er vi nødt til at finde ved at lave endnu en select på samme tabel (rc), hvor vi finder max(resultat) for personen som vi kender fra tabel (ra).
Jeg ved ikke om det er til at finde hoved at hale i, men jeg ved ikke helt, hvordan jeg skal forklare det. Håber det gav lidt... :o)
TUSIND TAK DIN HJÆLP - det var en rigtig brugbar beskrivelse - nu ved jeg hvad der sker.
:-)) karsten_larsen
Synes godt om
Ny brugerNybegynder
Din løsning...
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.