Med version 7 af TeamShare tager Lector næste skridt og bygger en platform for AI-agenter, der i højere grad kan følge medarbejderen gennem hele arbejdsprocessen.
DISTINCTROW tager kun en rækker En gang hvis den går igen flere gange.... Det skulle bare være DISTINVT som tager en kolonne med hvis den findes flere gange.. Men jeg har lige prøvet at teste SQL'en i Access og den er faktisk ikke nødvendig...:
Så dette skulle være nok: sql = "SELECT dato, Sum(aflæsning) AS SumAflæsning FROM tabel GROUP BY dato ORDER BY Sum(aflæsning);"
' viser de målere jeg vil have fat i SELECT MalerID FROM Maler WHERE MalerType = 1
'viser data, og skulle ´gerne gøre det for ovenstående målere SELECT Forbrugsdato, Sum(forbrugsaflaesning) AS Summen FROM forbrug GROUP BY Forbrugsdato ORDER BY Summen
Eller kan der være flere målinger på samme måler i samme måned? Nej, men der kan feks være flere varmemålere der aflæses hver måned. Og jeg ønsker det samlede forbrug, hen over alle målere
Prøv denne SQL, den sammentæller hvor målerID = A:
sql="SELECT Forbrugsdato, malerID, Sum(forbrugsaflaesning) AS Sumforbrugsaflaesning FROM forbrug WHERE malerID = 'A' GROUP BY Forbrugsdato, malerID ORDER BY Sum(forbrugsaflaesning);"
"SELECT Sum(forbrug.forbrugsaflaesning) AS SumOfforbrugsaflaesning, maler.malerType, forbrug.frobrugsdato FROM forbrug RIGHT JOIN maler ON forbrug.malerID = maler.malerID GROUP BY maler.malerType, forbrug.frobrugsdato ORDER BY maler.malerType, forbrug.frobrugsdato;"
Du kan også putte en WHERE ind for at vælge en bestem målertype:
SQL = "SELECT Sum(forbrug.forbrugsaflaesning) AS SumOfforbrugsaflaesning, maler.malerType, forbrug.frobrugsdato FROM forbrug RIGHT JOIN maler ON forbrug.malerID = maler.malerID WHERE maler.malerType = 1 GROUP BY maler.malerType, forbrug.frobrugsdato ORDER BY maler.malerType, forbrug.frobrugsdato;"
"SELECT Sum(forbrug.forbrugsaflaesning) AS SumOfforbrugsaflaesning, maler.malerType, forbrug.frobrugsdato FROM forbrug RIGHT JOIN maler ON forbrug.malerID = maler.malerID GROUP BY maler.malerType, forbrug.frobrugsdato ORDER BY maler.malerType, forbrug.frobrugsdato;"
nej, jeg ønsker feks at se det totale varmeforbrug forbrugt af alle varmemålere fordelt på alle måneder
eks (Dette billede skal jeg have frem, og det er sum rækken jeg ikke kan få) Måler Jan Feb Mar A 100 200 120 B 300 500 400 c 400 100 300 Sum 800 800 820
Det jeg lige kan komme på er dette men jeg ved ikke helt om jeg misforstår hvordan du ønsker den sidste tabel:
"SELECT Sum(forbrug.forbrugsaflaesning) AS SumOfforbrugsaflaesning, forbrug.frobrugsdato FROM forbrug INNER JOIN maler ON forbrug.malerID = maler.malerID WHERE maler.malerType=1 GROUP BY forbrug.frobrugsdato;"
Den ligner meget en af de andre. Du kan nok ikke både så tal og sum i samme SQL....
En mand spørger mig: hvor meget varme bruget vi i januar på vores tre målere. og hvor meget brugte vi i marts. Jeg vil ikke præsentere ham for hvad vi har brugt indtil nu, men bare det han spørger om.
De to foregående selects du har lavet tjener fint formålet at lægge månedernes forbrug sammen, men ikke at præsentere månederne enkeltvis
Det jeg er kommet frem til er lidt vildt.... med man skal summere og så trække fra hinanden så det er blvet til nogle select selct..
"SELECT DISTINCT (SELECT SUM(forbrugsaflaesning) AS kol1 FROM forbrug WHERE frobrugsdato = '01-03-02' AND malerID=1) - (SELECT SUM(forbrugsaflaesning) FROM forbrug WHERE frobrugsdato = '01-02-02' AND malerID=1) AS Udtryk1 FROM forbrug;"
Ja men man kan jo lave noget smart asp kode som bygger SQL op koden skal ud fra ønsket input (Marts 2002, Varmeforbrug) kunne finde StartDato (01-02-02) og SlutDato (01-03-02) og konverter Varmeforbrug til malerType=1, det er relativ let at lave man skal dog huske at tage højde for årsskifte.
Eks.: Jeg ønsker forbrug for Marts 2002. Input kunne være monthStr="Marts" og yearStr="2002" og forbrugstype="varme"
if monthStr = "Marts" then monthNo = "03" if forbrugstype = "varme" then malerType = 1
SlutDato = "01-" & monthNo & yearStr monthNo = CInt(monthNo) - 1 'Det skal natuligvis være mere intiligent omkring års skifted. StartDato = "01-" & monthNo & yearStr
For nu at få alle målere som er varme målere med i udregningen har jeg udvidet SQL'en så den komme til at se sådan ud:
SQL = "SELECT DISTINCT (SELECT Sum(forbrug.forbrugsaflaesning) AS SumOfforbrugsaflaesning FROM forbrug INNER JOIN maler ON forbrug.malerID = maler.malerID WHERE frobrugsdato = '" & SlutDato & "' AND maler.malerType=" & malerType & ";) - (SELECT Sum(forbrug.forbrugsaflaesning) AS SumOfforbrugsaflaesning FROM forbrug INNER JOIN maler ON forbrug.malerID = maler.malerID WHERE frobrugsdato = '" & StartDato & "' AND maler.malerType=" & malerType & ";) as tallet FROM forbrug;"
udskriv med rs("tallet")
Det bliver jo relative stort. Så Alternativt kan man lave det med to SQL'er: SQL1 = "hendt varmeforbrug for marts i Tallet" SQL2 = "hendt varmeforbrug for februar i Tallet" set rs = connection.execute(SQL1) tempForbrug = rs("Tallet") set rs = connection.execute(SQL2) Forbrug er = tempForbrug - rs("Tallet")
"SELECT Sum(forbrug.forbrugsaflaesning) AS SumOfforbrugsaflaesning, forbrug.frobrugsdato FROM forbrug INNER JOIN maler ON forbrug.malerID = maler.malerID WHERE maler.malerType=1 GROUP BY forbrug.frobrugsdato;"
der resluterer dette: 9100 (jan) 11230 (jan + feb) 12340 (jan + feb + marts)
Hvorefter jeg trak dem fra hinanden ((jan + feb) - (jan)), og det virker perfekt.
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.