Många COUNT

ASP

12 svar · 236 visningar · startad av evesve

Medlem sedan sep. 2001163 inlägg
Trådstart#1

Hej! Nytt problem!
Jag vill ha ut en tabell som ska se ut ungefär så här:
============
AVD1 Summa:12st ' Summan av Grupp 1-3
Grupp1 Summa:3st
Grupp2 Summa:4st
Grupp3 Summa:5st
AVD2 Summa:10st ' Summan av Grupp 1-3
Grupp1 Summa:4st
Grupp2 Summa:2st
Grupp3 Summa:4st
osv.
============
Jag har kommit så här långt när det gäller COUNT och att visa tabellen.
Det här bör visa lista och räkna Avd1 resp. Avd1/Grupp1.
Hur får jag den att räkna varje grupp utan att lägga till mängder med COUNT?

<%Set RecSet = Server.CreateObject("ADODB.Recordset") 
 Visa = "SELECT * FROM Avdelningar order by Avd"
summa = "SELECT count(*) AS grupper FROM databas where Avd = 'Avd1'"
summa2 = "SELECT count(*) AS Grupper2 FROM databas where Avd = 'Avd1' AND Grupp= 'Grupp1'"

RecSet.Open summa, Connect, adOpenStatic, adLockOptimistic  
summa=RecSet("Grupper")
RecSet.Close

RecSet.Open summa2, Connect, adOpenStatic, adLockOptimistic  
summa2=RecSet("Grupper2")
RecSet.Close

RecSet.Open Visa, Connect, adOpenStatic, adLockOptimistic

Response.write "<TR><TD colspan=5> <B>"&RecSet("Avd")&"</B>, "&antalsold&"</TD></TR>"

 Do While Not RecSet.EOF %> 
<!--MELLANRUM MELLAN GRUPPERNA-->
 <%Grupp = ""
 If Grupp <> RecSet("Avd") then
 if Grupp <> "" thenResponse.write "<TR><TD colspan=5> <B>"&RecSet("Avd")&"</B>, "&summa&"</TD></TR>" 
 Grupp = RecSet("Avd")
 end if %>
<!--MELLANRUM MELLAN GRUPPERNA slut-->

<TR>
<td><% =RecSet("Avd") %></td>
<td><% =RecSet(Grupp") %></td>
<td><% =summa2 %> st</td>
</TR>
<% RecSet.MoveNext 
Loop
RecSet.Close %>
Medlem sedan dec. 200012 464 inlägg
#2

Kan du testa med denna fråga

select count(*) as Total, avd, '' as grupp,1 as typ
  from databas
 group by avd
union
select count(*) ,avd,grupp,2
  from databas
 group by avd,grupp
order by avd,typ,grupp
Medlem sedan sep. 2001163 inlägg
#3

Det verkar bra, men jag får inte ut det rätt.
Jag har försökt alla alternativ i stället för mina nedanstående frågetecken och får samma värde antingen en eller trettio gånger.

RecSet.Open summa, Connect, adOpenStatic, adLockOptimistic 
summa=????????????????????????????
Do While Not RecSet.EOF
Response.write summa
RecSet.MoveNext 
Loop
RecSet.Close

...något förenklat.

Medlem sedan dec. 200012 464 inlägg
#4
query = "select count(*) as Total, avd, '' as grupp,1 as typ
from databas group by avd
union select count(*) ,avd,grupp,2
from databas group by avd,grupp order by avd,typ,grupp"

set rs = connect.execute(query)

while not rs.eof
if cint(rs("typ") = 1 then
   response.write rs("avd") 
else
response.write rs("grupp")
end if
response.write " Summa: " & rs("total") & "st <br>"
rs.movenext
wend
rs.close
set rs=nothing
Medlem sedan sep. 2001163 inlägg
#5

Suveränt! Det bara rasslade siffror.
Till och med rätt siffror!
Dom kopplingar jag har är 01, 02, 03 o.s.v som ligger under "Avd".
Motsvarande för grupperna.
Vilket ger:
01 Summa:12 st
01 Summa: 3 st
02 Summa: 4 st
03 Summa: 5 st
02 Summa:10 st
O.S.V.

Kan jag i samma selectsats få ut ex.
"Avd 1" som i kolumnen "Anamn" alltid är samma som "01" i kolumnen "Avd".
Detta skulle ge:
01 Avd1 Summa:12 st
01 Grp1 Summa: 3 st
02 Grp2 Summa: 4 st
03 Grp2 Summa: 5 st
02 Avd1 Summa:10 st
O.S.V.
Jag har för sökt hämta namnen från en annan tabell där jag listat avdelningar och grupper, men som vanligt:
Ingen framgång.

Medlem sedan dec. 200012 464 inlägg
#6

Det beror på hur dom tabller där du har namn på grupper och avdelnngar ser ut.

Vilka kolumnre ingår och hur hänger det ihop med tabellen databas?

Medlem sedan sep. 2001163 inlägg
#7

Det är det som är problemet att dom inte är kopplade till varandra.

Jag har en tabell (Enheter) med kolumnerna:
Avd, Anamn, Grupp, Gnamn
som listas:
01, Avd1, 01, Grp1
01, Avd1, 02, Grp2
OSV.
Den tabellen använder jag för menystruktur och inmatning av nya enheter.
Ska den användas så måste antingen selectsatsen ge ett noll-värde på rader som inte finns representerade i "databas" eller så måste raderna från "enheter" utelämnas om dom inte finns i "databas" (bästa alternativet).
Kan man inte hitta någon "select distinct"-variant på tabellen "databas" och koppla ihop det COUNT?

Medlem sedan dec. 200012 464 inlägg
#8

Jo ,det är lite olyckligt med den databasdesignen. Om du testar den här frågan då?

query = "select total,anamn,grupp,type from (
select count(*) as Total, avd, '' as grupp,1 as typ
from databas group by avd ) as s inner join enheter on s.avd = enheter.avd
union select count(*) ,anamn,grpnamn,2
from databas inner join enheter on (databas.avd = enheter.avd and databas.grupp = enheter.grupp)
group by avd,grupp order by avd,typ,grupp"

I och med att man har en union så kommer den att ta bort alla duplikat.

red: saknades en parentes.

Medlem sedan sep. 2001163 inlägg
#9

Felmeddelande:
Det angivna fältet 'Avd' kan referera till fler än en av de tabeller som är uppräknade i SQL-uttryckets FROM-instruktion

Medlem sedan dec. 200012 464 inlägg
#10
query = "select total,anamn,grpnamn,type from (
select count(*) as Total, avd, '' as grpnamn,1 as typ
from databas group by avd ) as s inner join enheter on s.avd = enheter.avd
union select count(*) ,anamn,grpnamn,2
from databas inner join enheter on (databas.avd = enheter.avd and databas.grupp = enheter.grupp)
group by anamn,grpnamn order by anamn,typ,grpnamn"

Ny bytte jag så att du bara får upp anamn, grpnamn och typ. (Avd oh grupp är väl ointressant?)

Medlem sedan sep. 2001163 inlägg
#11

Jag har bytt ut så jag ser "Avd1" i stället för "01" med hjälp av din ursprungliga kod.
Det fungerar alldeles förträffligt så länge.
I och för sig är det bättre med sortering på "01"-fälten, men man kan väl inte få allt här i livet.
Ditt senaste kodförslag ska jag försöka få in när jag har begripit vad den innebär.
Jag tackar så länge! Återkommer säkert!

Medlem sedan nov. 20017 144 inlägg
#12

men man kan väl inte få allt här i livet.

Vem har sagt det? Vem sätter begränsningarna? ;)

MVH Jesper T

Medlem sedan sep. 2001163 inlägg
#13

Nej Jesper,
men lite ödmjukhet skadar väl inte.
Mitt slutmål är ungefär: http://www.websamba.com/svenssons/test/avdelningar.html
.....men varför skynda så länge det fortfarande är vinter?

256 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)