Jag använder mig av ett enda relevant fält i en Accessdatabas som lagrar viktvärden mellan 20 och 25 kg. Nu vill jag gruppera dessa viktvärden efter intervall på 0,5 kg och antal enligt följande:
Intervall Antal
20.0-20.5 x st
20.5-21.0 x st
21.0-21.5 x st
21.5-22.0 x st
22.0-22.5 x st osv.
Jag har suttit och laborerat med GROUP BY-satser och anrop av funktioner men kommer ingen vart. Jag hittar heller inga lösningar efter att ha sökt i forumet. Presentationen skall visas på en websida m h a ASP.
Din SQL-sats genererar inga fel men den returnerar heller inga poster vilket jag inte förstår.
rs.open "select iif(nettovikt <= 20.5, '20-20.5',
iif(nettovikt <= 21.0,'20.5-21.0',
iif(nettovikt <= 21.5,'21.0-21.5',
iif(nettovikt <= 22.0,'21.5-22.0',
iif(nettovikt <= 22.5,'22.0-22.5',
iif(nettovikt <= 23.0,'22.5-23.0',
iif(nettovikt <= 23.5,'23.0-23.5',
iif(nettovikt <= 24.0,'23.5-24.0',
iif(nettovikt <= 24.5,'24.0-24.5', '24.5-25.0'))))))))) as intervall, count(*) as antal
from tblVikter
Where Year(tblVikter.datum) = " & initYear & " AND tblVikter.datum = #" & dDatum & "#
group by 1", conn, 2, 2
If rs.bof Or rs.eof Then
%>
<tr><td colspan=3><font class="textred"><b>Det finns inga uppgifter för begärd period.</b></font></td></tr>
<%
Else
arrayData3 = rs.GetRows()
rs.close
End If
Fältnamnet är döpt till nettovikt och är av typen Single. Det finns också garanterat värden i databasen inom alla intervaller. Jag kör mot en Access97-databas med MDAC 2.0.
Jag har testat att köra SQL-satsen utan WHERE-klausulen för att eliminera risken för tjall med variablerna initYear och dDatum. Dock så returneras fortfarande inga poster. Jag kan ju alltid lösa bekymret genom att lägga till ett extra fält i databasen där jag lagrar respektive intervall och sedan köra en GROUP BY på den kolumnen.
Det verkar onödigt. Kan du testa delar av frågan? T.ex. att du tar bort count och group by och bara har kvar iif-delen. Sen så kan du också testa med att istället för group by 1 lägga dit hela uttrycket med iif.
Jag testade, som du sa, med att först ta bort count och group by, men utan resultat. När jag även tog bort WHERE-klausulen så returneras posterna.
Märkligt. Men jag måste nog ha med både villkoret och "count-fältet".
Sedan vet jag inte riktigt hur jag lägger till hela uttrycket med iif. Vill du hjälpa mig igen, LarsG?
Jag testade din senaste sats, men utan att några poster returnerades. Jag testade även samma fast utan Where-klausulen. Sedan måste jag erkänna att jag var lite slarvig innan. När jag inte tog med Where-klausulen så returnerades bara en post, nämligen den med intervallet 21.0-21.5 som ligger i mitten av hela spridningen. Har annars en spridning ganska jämnt fördelad mellan 19.5 och 25.5. Märkligt att bara en enda returneras.
Knepigt med histogram...
Har du några andra förslag, LarsG, annars lägger jag nog till ett extra textfälten med längden 15.
Nej, men däremot klantigt beteende från undertecknad. Det var inga fel på SQL-satsen från början. Felet låg i min arrayhantering när jag skrev ut posterna.
For iRad = 0 To Ubound(arrayData3)
skall vara
For iRad = 0 To Ubound(arrayData3, 2)
Tack för din höga kompetens
Högaktningsfullt
/SB
264 ms totalt · 4 externa anrop · v20260731065814-full.442f7a9e