08. marts 2006 - 10:27Der er
14 kommentarer og 1 løsning
Tælle svar i en database - Select Count
Hej!
Jeg har en database med 9 felter: Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8 og Q9. I databasen skrives svarene fra et spørgeskema, der består af 1 spørgsmål med 3 prioterede svar. Dvs. hver deltager sætter tre krydser.
Svarene skrives som "Ja" i databasen og trækkes ud med nedenstående script, som viser at der er 0 svar i alt - på trods at min test-database allerede indeholder 13 svar x 3 = 39 svar/Ja.
Jeg har brug for en sammentælling af de afgivede svar for at kunne præsentere svarene procentvis.
Mit script tæller korrekt hvis jeg kun vælger f.eks. at tælle svarene i Q1, Q2 og Q3, men hvis jeg vælger flere Q'er, tæller den ikke korrekt.
Hjælp venligst!
--- start script ---
<% ' DSNLess forbindelse til databasen strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("Database/2006.mdb")
Set myConn = Server.CreateObject("ADODB.Connection") myConn.Open strDSN
' Tælle alle svar i spørgsmål 1 strSQL = "SELECT COUNT(*) AS Antal FROM Games WHERE Q1 & Q2 & Q3 & Q4 & Q5 & Q6 & Q7 & Q8 & Q9 Like 'Ja'" Set rs = myConn.Execute(strSQL) Response.Write "Der er i alt " & rs("Antal") & " svar i spørgsmål 1"
' Luk forbindelse myConn.Close Set myConn = Nothing %>
Jeg ville jo mene det skulle være sådan, hvis noget:
strSQL = "SELECT COUNT(*) AS Antal FROM Games WHERE Q1 like 'Ja' or Q2 like 'Ja' or Q3 like 'Ja' or Q4 like 'Ja' or Q5 like 'Ja' or Q6 like 'Ja' or Q7 like 'Ja' or Q8 like 'Ja' or Q9 like 'Ja'"
Det der sker er som sagt ikke at den tælle q1, q2 og q3, men at den tæller alle rækkerne med fordi der er mindst et svar som er ja i hver række. Din datastruktur besværliggør opgaven, idet du skal checke hver eneste svar for ja og lægge dette til en samlet sum for hver række som så til sidst skal summeres. Det er en opgave som vist er lettere at løse i en løkke frem for ren SQL og COUNT-funktionen...
sql = "SELECT * FROM Games" set rs = conn.execute(sql) antal = 0 do while not rs.eof for i = 1 to 9 if rs("Q" & i) = "Ja" then antal = antal + 1 end if next rs.movenext loop rs.close
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.