Og mit forslag virker ikke? Umiddelbart ville jeg jo tro, at det skulle gøre det. Den præsenterede SQL vil give et gennemsnit pr. apparatid, model og kalibreringskomponent. Eneste "fejl" jeg kan se, er at jeg ikke har navngivet gennemsnitsfunktionerne:
SELECT [00Apparat].ID_Apparat, [04Model].Model, [24KalibreringsKomponent].Kalibreringskomponent, AVG([26Log].Linearitet) AS Linearitetsgennemsnit, AVG([26Log].Repeterbarhed) AS Repeterbarhedsgennemsnit, AVG([26Log].Nøjagtighed) AS Nøjagtighedsgennemsnit FROM 24KalibreringsKomponent INNER JOIN (04Model INNER JOIN (00Apparat INNER JOIN 26Log ON [00Apparat].ID_Apparat = [26Log].ID_Apparat) ON [04Model].ID_Model = [00Apparat].ID_Model) ON [24KalibreringsKomponent].ID_Kalibreringskomponent = [26Log].ID_Kalibreringskomponent WHERE ((([00Apparat].ID_Apparat) LIKE " & soegestreng & ")) GROUP BY [00Apparat].ID_Apparat, [04Model].Model, [24KalibreringsKomponent].Kalibreringskomponent
Hvis det stadig ikke er det du ønsker, hvad er så forkert?
Hvis det er et gennemsnit af alle poster, altså uanset apparat mv., så skal disse felter ikke medtages:
SELECT AVG([26Log].Linearitet) AS Linearitetsgennemsnit, AVG([26Log].Repeterbarhed) AS Repeterbarhedsgennemsnit, AVG([26Log].Nøjagtighed) AS Nøjagtighedsgennemsnit FROM 24KalibreringsKomponent INNER JOIN (04Model INNER JOIN (00Apparat INNER JOIN 26Log ON [00Apparat].ID_Apparat = [26Log].ID_Apparat) ON [04Model].ID_Model = [00Apparat].ID_Model) ON [24KalibreringsKomponent].ID_Kalibreringskomponent = [26Log].ID_Kalibreringskomponent WHERE ((([00Apparat].ID_Apparat) LIKE " & soegestreng & "))
Hvis jeg nu, bare for at forenkle det lidt (så jeg bedre kan forstå det) nøjes med at beregne [26Log].Linearitet burde dette så ikke virke (med din kode, bare med kun én beregning):
Set sum = Server.CreateObject ("ADODB.Recordset") sum.Open "SELECT AVG([26Log].Linearitet) AS Linearitetsgennemsnit FROM 24KalibreringsKomponent INNER JOIN (04Model INNER JOIN (00Apparat INNER JOIN 26Log ON [00Apparat].ID_Apparat = [26Log].ID_Apparat) ON [04Model].ID_Model = [00Apparat].ID_Model) ON [24KalibreringsKomponent].ID_Kalibreringskomponent = [26Log].ID_Kalibreringskomponent WHERE ((([00Apparat].ID_Apparat) LIKE " & soegestreng & ")) ", Conn Linearitetsgennemsnit = sum.fields("Linearitetsgennemsnit")
Okay, fejlmeldingen betyder, at der er forskel på de "felttyper" der bruges i udvælgelseskriteriet, altså i WHERE delen af SQL sætningen. Jeg tror det er fordi, du bruger LIKE (som er en funktion, som kun kan bruges i forbindelse med tekstvariable) til at sammenligne med et numerisk felt (ID_apparat).
Så enten skal du udskifte LIKE med et alm lighedstegn, omdanne ID_apparat til en tekst-værdi før sammenligningen eller bruge et andet felt end ID_apparat til at søge på.
Jeg prøver at bruge et andet (og mere sigende) felt, nemlig ApparatBetegnelse (tekstfelt) til at søge på, men det undrer mig, at LIKE alligevel ikke accepteres og at jeg stadig får fejl
hmm..., kan det mon være fordi du ikke omkranser dit søgekriterie med '-tegn, således at SQL opfatter det som et felt (som ikke findes i tabellerne). Prøv at skrive:
Prøv for sjov skyld at indtaste en * eller måske en %, for LIKE kan man jo bruge til generisk søgning, ligesom når man fra dos boxen skriver f.eks. DIR *.exe for at få vist en liste med alle programmer. LIKE 'E' vil derfor ikke returnere nogen rækker, mens LIKE 'E*' vil returnere alle rækker hvor feltet starter med E. På samme måde vil LIKE '*e*' returnere alle rækker, hvor feltet indeholder et e. Jeg tænker, at LIKE '' ikke vil returnere noget, mens LIKE '*' vil returnere alle rækker, sådan som du ønsker.
I de fleste SQL varianter, skal man bruge %, men Access bruger * som standard. Go figure!?
Sorry, jeg glemte at kigge på din ASP kode. Jeg kan se, at du faktisk tilføjer det generiske % til søgekriteriet (og også '-tegnet, som jeg troede du havde glemt).
Det gør det jo endnu mere mystisk.
Jeg mener fra en fejlmelding i et tidligere spørgsmål at vide, at du faktisk bruger en Access database, selv om du har placeret dette spørgsmål under MS SQL kategorien, er det ikke rigtigt?
Så måske var det alligevel en idé, at prøve en udskiftning af % med * i ASP koden, og rette SQL tilbage til den oprindelige (hvis du har rettet noget i henhold til min kommentar fra 23/05-2006 23:52:10).
Prøv evt. helt at fjerne WHERE kriteriet fra SQL, og se om der så returnere noget. Bare for at se, om det er der problemet ligger.
Nej, det er der ikke. Du burde kunne bruge AVG (avarage) på de felter du ønsker et gennemsnit på.
SELECT AVG([26Log].Linearitet) AS Linearitetsgennemsnit, AVG([26Log].Repeterbarhed) AS Repeterenhedsgennemsnit, AVG([26Log].Nøjagtighed) AS Nøjagtighedsgennemsnit FROM 24KalibreringsKomponent INNER JOIN (04Model INNER JOIN (00Apparat INNER JOIN 26Log ON [00Apparat].ID_Apparat = [26Log].ID_Apparat) ON [04Model].ID_Model = [00Apparat].ID_Model) ON [24KalibreringsKomponent].ID_Kalibreringskomponent = [26Log].ID_Kalibreringskomponent;
Jeg går ud fra, at alle de nævnte felter er numeriske? AVG virker kun på numeriske felter (altså ikke på tekstfelter, selv om disse kun indeholder numeriske data).
Hmm.., så vidt jeg ved, virker SUM heller ikke på andet end numeriske felter.
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.