Avatar billede JenZen Novice
17. september 2005 - 11:43 Der er 23 kommentarer og
1 løsning

Sammenlægning af antal

Har brug for et stykke kode, der kan fortælle mig hvor mange gange der står A i tabel1 og hvor mange gange der står B.

Giver det mening.
Avatar billede nielle Nybegynder
17. september 2005 - 12:03 #1
Hvis A og B skal forstås som mulige værdier i et felt i din database (og ikke som bogstaver i en tekst i et felt i din database), så kan det f.eks. gøres sådan

SELECT ditFelt, Count(*) FROM dinTabel GROUP BY ditfelt

- eller hvis der også er andre værdier end A og B og det *kun* er A og B du ønsker:

SELECT ditFelt, Count(*) FROM dinTabel GROUP BY ditfelt WHERE ditFelt='A' OR ditFelt='B'
Avatar billede JenZen Novice
17. september 2005 - 12:10 #2
Det er ikke tal, men jeg skal blot vide hvor mange gange den fremkommer

F.eks. hvis der står A i 15 ud af 20 rækker skal den bare skrive antallet 15
hvis der så står B i 5 ud af de 20 rækker skal den blot skrive 5.
Avatar billede nielle Nybegynder
17. september 2005 - 12:21 #3
Ja, så er min SELECT vist lige det der skal til:

SQL = "SELECT ditFelt, Count(*) AS antal FROM dinTabel GROUP BY ditfelt"
Set rs = Conn.Execute(SQL)

Do While Not rs.EOF
    Response.Write "Posten " & rs("ditFelt") & " forekom " & rs("antal") & " gange<br>"
    rs.MoveNext
Loop
Avatar billede JenZen Novice
17. september 2005 - 12:33 #4
Kan du hjælpe lidt mere ?

Tabellen hedder Kunder, og feltet hedder Type.
Jeg skal have at vide hvor mange gange der står Sonofon i feltet.

Hvordan skal jeg udfylde det i nedenstående.

SQL = "SELECT ditFelt, Count(*) AS antal FROM dinTabel GROUP BY ditfelt"
Set rs = Conn.Execute(SQL)

Do While Not rs.EOF
    Response.Write "Posten " & rs("ditFelt") & " forekom " & rs("antal") & " gange<br>"
    rs.MoveNext
Loop
Avatar billede nielle Nybegynder
17. september 2005 - 12:44 #5
Ja, så er det jo simpelthen at erstatte mine navne ditFelt og dinTabel med de der gælder for dig:

SQL = "SELECT [type], Count(*) AS antal FROM kunder GROUP BY [type]"
Set rs = Conn.Execute(SQL)

Do While Not rs.EOF
    Response.Write "Posten " & rs("type") & " forekom " & rs("antal") & " gange<br>"
    rs.MoveNext
Loop
Avatar billede nielle Nybegynder
17. september 2005 - 12:46 #6
... men hvis det *kun* er en værdi du er interessert i så kan det også gøres sådan:

SQL = "SELECT Count(*) AS antal FROM kunder WHERE [type]='Sonofon'"
Set rs = Conn.Execute(SQL)
Response.Write "Posten 'Sonofon' forekom " & rs("antal") & " gange<br>"
Avatar billede JenZen Novice
17. september 2005 - 13:00 #7
Det her er hvad der står i min asp fil, og det eneste den fremkommer med er en fejl.

<!--#include virtual="/Includes/Connection.asp"-->
<%SQL = "SELECT Count(*) AS antal FROM kunder WHERE [type]='Sonofon'"
Set rs = Conn.Execute(SQL)%>

<%Response.Write "Posten 'Sonofon' forekom " & rs("antal") & " gange<br>"%>
Avatar billede nielle Nybegynder
17. september 2005 - 13:06 #8
Hvordan ser fejlen ud?
Avatar billede JenZen Novice
17. september 2005 - 13:21 #9
For some weird reason skriver den kun:

HTTP 500 - Intern serverfejl
Internet Explorer

Den kommer ikke med en debug fejl.
Avatar billede JenZen Novice
17. september 2005 - 13:26 #10
Her er der ALT hvad der står i hele Antal.asp

<%
  conpath = Request.ServerVariables("APPL_PHYSICAL_PATH")
  Set DB = Server.CreateObject("ADODB.Connection")
  DB.ConnectionString = _
    "Driver={Microsoft Access Driver (*.mdb)};" & _
    "DBQ=" & conpath & "/db/KundeDB.mdb;" & _
    "DefaultDir=" & conpath & "/db/KundeDB.mdb;" & _
    "FIL=MS Access;"
  DB.Open
%>
<% SQL = "SELECT Count(*) AS Antal FROM kunder WHERE [type]='Sonofon'"
Set rs = Conn.Execute(SQL) %>
<%=RS("antal")%>
Avatar billede nielle Nybegynder
17. september 2005 - 14:01 #11
Du har kald dit connection for DB, og derfor skal det så være:

<%
SQL = "SELECT Count(*) AS Antal FROM kunder WHERE [type]='Sonofon'"
Set rs = DB.Execute(SQL)
Respons.Write RS("antal") %>
Avatar billede JenZen Novice
17. september 2005 - 14:17 #12
Nu står der:

<%
  conpath = Request.ServerVariables("APPL_PHYSICAL_PATH")
  Set DB = Server.CreateObject("ADODB.Connection")
  DB.ConnectionString = _
    "Driver={Microsoft Access Driver (*.mdb)};" & _
    "DBQ=" & conpath & "/db/KundeDB.mdb;" & _
    "DefaultDir=" & conpath & "/db/KundeDB.mdb;" & _
    "FIL=MS Access;"
  DB.Open
%>
<%
SQL = "SELECT Count(*) AS Antal FROM kunder WHERE [type]='Sonofon'"
Set rs = DB.Execute(SQL)
Respons.Write RS("Antal") %>

Er vi enige om at det er det der skal stå, for den melder stadig fejl ?
Avatar billede nielle Nybegynder
17. september 2005 - 14:24 #13
Prøv dette:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<%
conpath = Request.ServerVariables("APPL_PHYSICAL_PATH")

Set DB = Server.CreateObject("ADODB.Connection")

ConnectionString = _
    "Driver={Microsoft Access Driver (*.mdb)};" & _
    "DBQ=" & conpath & "/db/KundeDB.mdb;" & _
    "DefaultDir=" & conpath & "/db/KundeDB.mdb;" & _
    "FIL=MS Access;"

DB.Open ConnectionString

SQL = "SELECT Count(*) AS Antal FROM kunder WHERE [type]='Sonofon'"

Set rs = Server.CreateObject("ADODB.Recordset")
Set rs = DB.Execute(SQL)

Respons.Write RS("Antal")
%>
Avatar billede JenZen Novice
18. september 2005 - 15:57 #14
Beklager det sene svar, men skulle lige til noget turnering i går så er først lige kommet i gang igen.

Men den nye sætning fejler sku stadig ;o(
Avatar billede nielle Nybegynder
18. september 2005 - 22:00 #15
Umiddelbart kan jeg ikke se nogen fejl i den kode - prøv at slette linjerne en af gangen nede fra og se så hvornår den pludselig kan køre. Det må så være den linje der fejler, og så kan vi kigge på problemet derfra.

Husk at refreshe siden med Ctrl+F5 - F5, uden Ctrl, kan resikere at hente fra cachen i stedet for at hente fra webserveren.
Avatar billede JenZen Novice
19. september 2005 - 00:11 #16
Fore some weird reason, så hjalp det at genstarte iis'en !?

Hvad hvis man gerne vil have 4 forskellige forekomster af det i én og samme asp side, altså med 4 forskellige tal, se nedenstående.

<!--#include virtual="/Includes/Connection.asp"-->
<%
SQL = "SELECT Count(*) AS Telia FROM Kunder WHERE [Selskab]='Telia' AND Dato=DateAdd('m',-6,Date()) AND Butik='NN'"

Set rs = Server.CreateObject("ADODB.Recordset")
Set rs = DB.Execute(SQL)
%>

<%
Response.Write RS("Telia")
%>

<%
SQL = "SELECT Count(*) AS Sonofon FROM Kunder WHERE [Selskab]='Telia' AND Dato=DateAdd('m',-6,Date()) AND Butik='NN'"

Set rs = Server.CreateObject("ADODB.Recordset")
Set rs = DB.Execute(SQL)
%>

<%
Response.Write RS("Sonofon")
%>

<%
SQL = "SELECT Count(*) AS Privat FROM Kunder WHERE [Type]='Privat' AND Dato=DateAdd('m',-6,Date()) AND Butik='NN'"

Set rs = Server.CreateObject("ADODB.Recordset")
Set rs = DB.Execute(SQL)
%>

<%
Response.Write RS("Privat")
%>

<%
SQL = "SELECT Count(*) AS Erhverv FROM Kunder WHERE [Type]='Erhverv' AND Dato=DateAdd('m',-6,Date()) AND Butik='NN'"

Set rs = Server.CreateObject("ADODB.Recordset")
Set rs = DB.Execute(SQL)
%>

<%
Response.Write RS("Erhverv")
%>
Avatar billede nielle Nybegynder
19. september 2005 - 09:07 #17
> Fore some weird reason, så hjalp det at genstarte iis'en !?

Så er det nok fordi at IIS'en selv har cachet resultaterne.


> Hvad hvis man gerne vil have 4 forskellige forekomster af det i én og samme asp side, altså med 4 forskellige tal, se nedenstående.

Jeg er ikke helt sikker på at jeg forstår spørgsmplet. Nedenstående kode burde fungere - men jeg har ikke lige forudsætningerne for at vide om det er det det rigtige den gør?

<!--#include virtual="/Includes/Connection.asp"-->
<%
Set rs = Server.CreateObject("ADODB.Recordset")

SQL = "SELECT Count(*) AS Telia FROM Kunder WHERE Selskab='Telia' AND Dato=DateAdd('m',-6,Date()) AND Butik='NN'"
Set rs = DB.Execute(SQL)
Response.Write RS("Telia") & "<br>"

SQL = "SELECT Count(*) AS Sonofon FROM Kunder WHERE Selskab='Sonofon' AND Dato=DateAdd('m',-6,Date()) AND Butik='NN'"
Set rs = DB.Execute(SQL)
Response.Write RS("Sonofon") & "<br>"

SQL = "SELECT Count(*) AS Privat FROM Kunder WHERE [Type]='Privat' AND Dato=DateAdd('m',-6,Date()) AND Butik='NN'"
Set rs = DB.Execute(SQL)
Response.Write RS("Privat") & "<br>"

SQL = "SELECT Count(*) AS Erhverv FROM Kunder WHERE [Type]='Erhverv' AND Dato=DateAdd('m',-6,Date()) AND Butik='NN'"
Set rs = DB.Execute(SQL)
Response.Write RS("Erhverv") & "<br>"
%>
Avatar billede JenZen Novice
19. september 2005 - 10:29 #18
Det faktisk helt rigtig forstået, kan "splitte" det ad...

Forstået således...


<!--#include virtual="/Includes/Connection.asp"-->
<%
Set rs = Server.CreateObject("ADODB.Recordset")

SQL = "SELECT Count(*) AS Telia FROM Kunder WHERE Selskab='Telia' AND Dato=DateAdd('m',-6,Date()) AND Butik='NN'"
Set rs = DB.Execute(SQL)

SQL = "SELECT Count(*) AS Sonofon FROM Kunder WHERE Selskab='Sonofon' AND Dato=DateAdd('m',-6,Date()) AND Butik='NN'"
Set rs = DB.Execute(SQL)

SQL = "SELECT Count(*) AS Privat FROM Kunder WHERE [Type]='Privat' AND Dato=DateAdd('m',-6,Date()) AND Butik='NN'"
Set rs = DB.Execute(SQL)

SQL = "SELECT Count(*) AS Erhverv FROM Kunder WHERE [Type]='Erhverv' AND Dato=DateAdd('m',-6,Date()) AND Butik='NN'"
Set rs = DB.Execute(SQL)
%>

<% Response.Write RS("Telia") %>
<% Response.Write RS("Privat") %>
<% Response.Write RS("Erhverv") %>
<% Response.Write RS("Sonofon") %>
Avatar billede nielle Nybegynder
19. september 2005 - 15:03 #19
Så er det nok mest effektivt at gemme dem i variable undervejs:

<!--#include virtual="/Includes/Connection.asp"-->
<%
Set rs = Server.CreateObject("ADODB.Recordset")

SQL = "SELECT Count(*) AS Telia FROM Kunder WHERE Selskab='Telia' AND Dato=DateAdd('m',-6,Date()) AND Butik='NN'"
Set rs = DB.Execute(SQL)
Telia = rs("Telia")

SQL = "SELECT Count(*) AS Sonofon FROM Kunder WHERE Selskab='Sonofon' AND Dato=DateAdd('m',-6,Date()) AND Butik='NN'"
Set rs = DB.Execute(SQL)
Sonofon = rs("Sonofon");

SQL = "SELECT Count(*) AS Privat FROM Kunder WHERE [Type]='Privat' AND Dato=DateAdd('m',-6,Date()) AND Butik='NN'"
Set rs = DB.Execute(SQL)
Privat = rs("Privat");

SQL = "SELECT Count(*) AS Erhverv FROM Kunder WHERE [Type]='Erhverv' AND Dato=DateAdd('m',-6,Date()) AND Butik='NN'"
Set rs = DB.Execute(SQL)
Erhverv = rs("Erhverv");
%>

<% =Telia %>
<% =Privat %>
<% =Erhverv %>
<% =Sonofon %>
Avatar billede JenZen Novice
19. september 2005 - 15:59 #20
SÅDAN !!!

Vil du lige bruge det som SVAR ? :)
Avatar billede nielle Nybegynder
19. september 2005 - 17:16 #21
200 point er altså godt nok i overkandten for et spørgsmål af denne sværhedsgrad. giv mig 30 og tag du bare selv resten igen. :^)

... og et svar :^)
Avatar billede nielle Nybegynder
18. oktober 2005 - 22:39 #22
Lukketid?
Avatar billede nielle Nybegynder
04. november 2005 - 23:40 #23
?
Avatar billede nielle Nybegynder
24. december 2006 - 07:51 #24
Takker for point, og Glædelig jul.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester