Avatar billede mini41 Nybegynder
18. februar 2005 - 15:09 Der er 6 kommentarer og
1 løsning

Udregne tre forskellige totaler

Jeg har en db med bla to felter kaldet 'reptotal' og ophugtekst'

På min statistik side kan jeg bla. liste et given felt.

Jeg ønsker ved listningen at få følgende resultater:

1. Alle listede posters 'reptotal' lagt sammen og vist på skærmen.


2. Alle listede posters 'reptotal' hvor 'ophugtekst' <> "" lagt sammen og vist på skærmen.


3. Alle listede posters 'reptotal' hvor 'ophugtekst' = "" lagt sammen og vist på skærmen.
Avatar billede eagleeye Praktikant
18. februar 2005 - 15:23 #1
Umiddelbart er der et par metoder at gøre det på.
En med 2 SQL sætninger som henter hver deres sum for 2. og 3. 
1. er en sum af 2. og 3.

Det kræver så den de to SQL sætnigner har samme where del som den SQL sætning der henter data til at vise på siden samt en etra ting som gør den kun tæller nogle poster med.

'find sum for ophugget<>""
sql = "selet sum(reptotal) as antal from tabelnavn where ophugtekst is not null"
set rs = Conn.Execute(SQL)
sum2 = rs("antal")
if isNull(rs("antal")) then sum2=0

'find sum for ophugget =""
sql = "selet sum(reptotal) as antal from tabelnavn where ophugtekst is null"
set rs = Conn.Execute(SQL)
sum3 = rs("antal")
if isNull(rs("antal")) then sum3=0

'Find total summen
sum1 = int(sum2)+int(sum3)


-----------------
En anden måde er at lave 3 variable i koden sum1, sum2, sum3 og ligge reptotal når du looper igennem udskrivningen, igen sum1 er lig sum2+sum3:

sum1=0
sum2=0
sum3=0
do while not rs.EOF
  if rs("ophugtekst")<>"" then
    sum2=sum2+int(rs("reptotal"))
  else
    sum3=sum3+int(rs("reptotal"))
  end if
  sum1=sum2+sum3
..
  rs.movenext
loop
Avatar billede kjulius Novice
18. februar 2005 - 15:46 #2
Du skriver ikke noget om, hvilken database det handler om, men hvis der er tale om Access burde denne SQL kunne give dig din oversigt:

SELECT SUM(reptotal) AS reptotalt, SUM(IIf(ophugtekst <> "", reptotal, 0)) AS repmedteksttotalt, SUM(IIf(ophugtekst = "", reptotal, 0)) AS repudenteksttotalt
WHERE ...

Hvis det er en anden database, som ligger lidt tættere på standarden, så skal IIf udskiftes med en CASE konstruktion, som også kan variere lidt, men f.eks. kan se sådan ud:

SELECT SUM(reptotal) AS reptotalt, SUM(CASE WHEN ophugtekst <> "" THEN reptotal ELSE 0 END) AS repmedteksttotalt, SUM(CASE WHEN ophugtekst = "" THEN reptotal ELSE 0 END) AS repudenteksttotalt
WHERE ...
Avatar billede mini41 Nybegynder
18. februar 2005 - 15:47 #3
Det virker næsten, den lister ok men den kan nu ikke liste status feltet (nok fordi if then sætningen er falsk) det er den linie du rettede for mig tidlige idag.



<%
sum1=0
sum2=0
sum3=0

do while not record.EOF

if record("ophugtekst")<>"" then
    sum2=sum2+int(record("reptotal"))
  else
    sum3=sum3+int(record("reptotal"))
  end if
  sum1=sum2+sum3
%>
                  </font>
<table border="0" width="750" align="center">
  <tr>
    <td width="139"><font face="Arial" color="#000000" size="1"><%response.write record("forhandlernavn")%>
     
      </font>
     
</td>
    <td width="63"><font face="Arial" color="#000000" size="1"><% if record("ophugtekst")<>"" then response.write "<span style=""color: #ff0000;""> Ophugget</span>" else response.write "Repareret" end if %>
Avatar billede eagleeye Praktikant
18. februar 2005 - 15:50 #4
Så prøv at rette de linjer til:


<%
sum1=0
sum2=0
sum3=0

do while not record.EOF
ophugget = record("ophugtekst")
if isnull(ophugget) then ophugget=""
if ophugget<>"" then
    sum2=sum2+int(record("reptotal"))
  else
    sum3=sum3+int(record("reptotal"))
  end if
  sum1=sum2+sum3
%>
                  </font>
<table border="0" width="750" align="center">
  <tr>
    <td width="139"><font face="Arial" color="#000000" size="1"><%response.write record("forhandlernavn")%>
   
      </font>
   
</td>
    <td width="63"><font face="Arial" color="#000000" size="1"><% if ophugget<>"" then response.write "<span style=""color: #ff0000;""> Ophugget</span>" else response.write "Repareret" end if %>
Avatar billede mini41 Nybegynder
18. februar 2005 - 15:54 #5
Det hjalp ikke noget, der vises ikke "if ophugget<>"" then response.write "<span style=""color: #ff0000;""> Ophugget"

Ellers virker det.
Avatar billede eagleeye Praktikant
18. februar 2005 - 15:59 #6
Så prøv at skrive det over nogle linjer:

<% if ophugget<>"" then
  response.write "<span style=""color: #ff0000;""> Ophugget</span>"
else
  response.write "Repareret"
end if %>
Avatar billede mini41 Nybegynder
24. februar 2005 - 08:27 #7
Eagleeye, tak for svar det virker nu, svar venligst for point.

Jeg har endnu et spg. som jeg opretter nu.
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