Lite fortsättning på förra tråden men med ny fråga.
Har följande kod för att lista alla amnen som finns inlagda för ett ett id.
<%
SQL = "Select Distinct amne FROM amne WHERE id = " & CInt(Request.QueryString("Id")) &" ORDER BY amne"
Set RecSet = Connect.execute(SQL)
%>
<% Do Until recset.EOF %>
<%= recset("amne")%>
<%
Recset.MoveNext
loop
recset.close
%>
Nu vill jag lägga in en SQL sats i loopen för att räkna ut totalsumman för ett ämne.
Sen loopa nästa ämne och räkna ut totalsumman för det ämnet osv.
Sen ska allt presenteras som
Ämna
Totalsumma
nästa ämne
totalsumma
osv
SQL satsen som jag vill ha in ser ut så här.
SQL = "select amne, niva, id, amnesid, sum(niva) as totaltniva1 from amne Where id = " & CInt(Request.QueryString("Id")) &" AND niva = 1 group by id, amnesid, niva"
Set Rs1 = Connect.Execute(SQL)
Det jag skulle vilja ha in är WHERE amne = recset("amne") efter id = " & CInt(Request.QueryString("Id")) &" AND niva = 1
men det vill inte fungera.
SQL = "select amne, niva, id, amnesid, sum(niva) as totaltniva1 from amne Where id = " & CInt(Request.QueryString("Id")) &" AND niva = 1 group by id, amnesid, niva"
Är väl den du skall använda till ditt RecSet?
Och när du loopar ut det så ser det ut något liknande:
<%
dim sCurrentTopic
SQL = "select amne, niva, id, amnesid, sum(niva) as totaltniva1 from amne Where id = " & CInt(Request.QueryString("Id")) &" AND niva = 1 group by id, amnesid, niva"
Set RecSet = Connect.execute(SQL)
If Not RecSet.EOF Then
Do Until recset.EOF
If sCurrentTopic <> recset("amne") Then
Response.Write "<h1>" & RecSet("amne") & "</h1>"
End If
Response.Write RecSet("niva") & " - " & RecSet("totaltniva1") & "<br />"
sCurrentTopic = recset("amne")
RecSet.MoveNext
Loop
End If
recset.close
%>
för att krångla till det lite så vill jag även att det ska räknas ihop hur många nivå 1 det finns för varje ämne.
likadant hur många nivå 2 det finns för varje ämne
och nivå 3 likadant
detta ska skrivas ut ungefär så här.
Response.Write RecSet("niva") & " - " & RecSet("totaltniva1") & " = antal " & RecSet("AntalPerNiva") & " <br /> "
Använder koden nedan
I kolumnen poäng så finns värdena 0 till 3. Om jag vill räkna ut totalsumman för alla där det är 1. och totalsumman för 2 och totalsummar för 3.
enkelt översatt men den koden fungerar inte.
alt. att räkna hur många fält som finns med en 1:a och sen gånga med 1, antal fält med 2:a och gånga med 2 och antal fält med 3 och gånga med 3.
se fet stil
SQL = "select amne, niva, id, amnesid, idniva, sum(poang) as totaltvarde, sum(poang) where poang = 1 as totaltvarde1, sum(poang) where poang = 2 as totaltvarde2, sum(poang) where poang = 3 as totaltvarde3 Count(amne) as AntalPerNiva from "amne Whereid = " & CInt(Request.QueryString("Id")) &" group by id, amnesid, niva"
Set RecSet = Connect.execute(SQL)
<%
dim sCurrentTopic, maxniva
SQL = "select amne, niva, id, amnesid, idniva, sum(poang) as totaltvarde, Count(amne) as AntalPerNiva from "amne Whereid = " & CInt(Request.QueryString("Id")) &" group by id, amnesid, niva"
Set RecSet = Connect.execute(SQL)
If Not RecSet.EOF Then
Do Until recset.EOF
If sCurrentTopic <> recset("amne") Then
Response.Write "<p class='titel'>" & RecSet("amne") & "</p>"
End If
maxniva = (CInt(recset("antalperniva")) * 3)
snitt = (Cint(recset("totaltvarde")) / maxniva)
linje = (snitt * 450)
Response.Write "<table cellspacing='0' cellpadding='0'><tr><td width'100'>Nivå " & RecSet("niva") & "</td><td style='border: 1px solid #000000; padding: 1px' width='450'><img border='0' height='15' src='../bilder/mallinje.gif' width="& linje &"></td></tr></table> <br />"
sCurrentTopic = recset("amne")
RecSet.MoveNext
Loop
End If
recset.close
%>
Använd istället ASP... annars kommer du få samma resultat och generera mer fält i ditt recordset än vad du behöver.
lägg till fältet poang ska hämtas ut i din SQL (helt vanligt)
Do until Recset.EOF
...
..
SELECT CASE RecSet("poang")
Case 0
lSum0 = lSum0 + RecSet("poang")
Case 1
lSum1 = lSum1 + RecSet("poang")
Case 2
lSum2 = lSum2 + RecSet("poang")
Case 3
lSum3 = lSum3 + RecSet("poang")
End Select
Och efter Loop så kan du skriva ut lSumX för att få reda på summan
säg att för ämnesid 1 och nivå 1 så finns det 5 st fält som har värdet 1 i poängfältet då för det ämnet ska det visas 5
ämnesid 1 och nivå 1 så finns det 3 st fält som har värdet 2 i poängfältet då för det ämnet ska det visas 3
ämnesid 1 och nivå 2 så finns det 4 st fält som har värdet 1 i poängfältet då för det ämnet ska det visas 4
osv
I princip är det mycket enkelt och effektivt att ta ut denna data direkt i SQL-frågan. Huruvida det funkar för dig återstår att se.
SQL = "select amne, niva, id, amnesid, idniva, sum(poang) as totaltvarde, sum(case when poang = 1 then poang else null end) as totaltvarde1, sum(case when poang = 2 then poang else null end) as totaltvarde2, sum(case when poang = 3 then poang else null end) as totaltvarde3 Count(amne) as AntalPerNiva from amne Where id = " & CInt(Request.QueryString("Id")) &" group by amne, niva, id, amnesid, idniva"