[Risolto] Count

fighter57

Nuovo Utente
10 Set 2013
5
0
0
Poniamo che io abbia una tabella "PROVA" popolata con centinaia di record con i tre campi "A", "B" e "C"
Come posso creare una SELECT che mi faccia un conteggio di vari dati con diversi filtri.

Esempio: SELECT..count(A) as alfa for PROVA where A = 1
count(B) as beta for PROVA where B = 2
count(C) as gamma for PROVA where C = 1

E' possibile?
Grazie
 
La query che ti propongo conta il numero di campi "id" (contatore) che hanno nella colonna A il valore 1.
Puoi modificare "A" con "B", "C", ecc ecc...

Codice:
SQL = "SELECT COUNT(id) AS alfa FROM DB_PROVA WHERE A = (1) ;"

Esempio applicato in ASP:

Codice:
   Set objRs = Server.CreateObject("ADODB.Recordset")
   SQL = "SELECT COUNT(id) AS alfa FROM DB_PROVA WHERE A = (1) ;"
   objRs.Open SQL, strConnectSQL
   totale_conteggio = objRs("alfa")
   objRs.Close
   Set objRs = Nothing ' chiudo il recordset
 
Ti ringrazio per la soluzione consigliatomi, ma questa procedura la conosco bene!
Il problema è che vorrei, se possibile, visualizzare il conteggio di due o più campi contemporaneamente.
Mi spiego meglio con un esempio.
In una tabella con i campi "ANNO", "MATERIALE" e "VENDUTO".

[table="width: 500, class: grid"]
[tr]
[td]
ANNO​
[/td]
[td]
MATERIALE ACQUISTATO​
[/td]
[td]
MATERIALE VENDUTO​
[/td]
[/tr]
[tr]
[td]
2011​
[/td]
[td]
10 (count(MATERIALE))​
[/td]
[td]
4 (count(VENDUTO))​
[/td]
[/tr]
[tr]
[td]
2012​
[/td]
[td]
15​
[/td]
[td]
9​
[/td]
[/tr]
[tr]
[td]
2013​
[/td]
[td]
32​
[/td]
[td]
21​
[/td]
[/tr]
[/table]
 
...mi manderesti una copia esempio del DB in modo da lavorarci sopra?

Premetto che il DB lavora in MYSQL.
La tabella si chiama LEGGE, contiene migliaia di dati ed è strutturata con i seguenti campi:

VERBALE_IN (numero del verbale con il quale introduciamo il materiale in magazzino. Si ripete tante volte quante sono le voci introdotte)
EF (campo numerico che riporta l'anno dell'esercizio finanziario)
DENOMINAZ (denominazione del materiale)
MODELLO (modello del materiale)
MATRICOLA (matricola del materiale)
SCELTA (parametro che indica se il materiale viene distrutto o accantonato: distrutto=2, accantonato=1)

[table="width: 700, class: grid"]
[tr]
[td]
VERBALE_IN​
[/td]
[td]
EF​
[/td]
[td]
DENOMINAZ​
[/td]
[td]
MODELLO​
[/td]
[td]
MATRICOLA​
[/td]
[td]
SCELTA​
[/td]
[/tr]
[tr]
[td]1[/td]
[td]2012[/td]
[td]Pistola[/td]
[td]Beretta[/td]
[td]12345[/td]
[td]2[/td]
[/tr]
[tr]
[td]1[/td]
[td]2012[/td]
[td]Fucile[/td]
[td]Artigianale[/td]
[td]6789[/td]
[td]2[/td]
[/tr]
[tr]
[td]2[/td]
[td]2012[/td]
[td]Fucile[/td]
[td]Beretta[/td]
[td]1111[/td]
[td]1[/td]
[/tr]
[tr]
[td]1[/td]
[td]2013[/td]
[td]Fucile Semiautomatico[/td]
[td]Franchi[/td]
[td]222222[/td]
[td]2[/td]
[/tr]
[tr]
[td]1[/td]
[td]2013[/td]
[td]Carabina[/td]
[td]Brema[/td]
[td]33332[/td]
[td]1[/td]
[/tr]
[tr]
[td]2[/td]
[td]2013[/td]
[td]Fucile Sovrapposto[/td]
[td]Beretta[/td]
[td]444444[/td]
[td]1[/td]
[/tr]
[/table]

La pagina che vorrei creare deve indicarmi l'elenco degli anni con a fianco il conteggio delle voci introdotte, il conteggio delle voci distrutte ed il conteggio delle voci accantonate. Esempio:

[table="width: 700, class: grid"]
[tr]
[td]EF[/td]
[td]VOCI INTRODOTTE[/td]
[td]VOCI DISTRUTTE[/td]
[td]VOCI ACCANTONATE[/td]
[/tr]
[tr]
[td]2012[/td]
[td]3[/td]
[td]2[/td]
[td]1[/td]
[/tr]
[tr]
[td]2013[/td]
[td]3[/td]
[td]1[/td]
[td]2[/td]
[/tr]
[/table]

Attualmente lo script in questione riporta:

<%STRQ = "SELECT EF, COUNT(VERBALE_IN) AS RECORDS FROM LEGGE GROUP BY EF ORDER BY EF DESC"
ecc. ecc.

e mi mostra solo l'elenco degli anni ed il totale dei materiali versati.
 
Ultima modifica di un moderatore:
Mi dispiace, non sono riuscito a creare una query DOC per le tue esigenze, dovresti provare a postare il problema nella sezione SQL.

In alternativa ti propongo questo script il quale si avvicina molto alle tue esigenze:
Codice:
<%

	Dim Connect
		Connect = "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath("db1.mdb")


	Set Con_1 = Server.CreateObject("ADODB.Connection")
	Set Rst_1 = Server.CreateObject("ADODB.Recordset")
		Con_1.open  Connect
		Sql_1 = "SELECT EF, COUNT(VERBALE_IN) AS RECORDS FROM LEGGE GROUP BY EF ORDER BY EF DESC"
		Rst_1.Open Sql_1, Con_1, adOpenKeyset
		Rst_1_Min = 0
		Rst_1_Max = 99 ' massimo record estrapolati

			If NOT Rst_1.EOF Then ' se presente visualizzo

%>
<table width="600px" cellpadding="1" cellspacing="1" border="1" align="center">
<tr>
	<td>EF (ANNO)</td>
    <td>VOCI INTRODOTTE</td>
    <td>VOCI DISTRUTTE</td>
    <td>VOCI ACCANTONATE</td>
</tr>
<%
				While ((Rst_1_Min <> Rst_1_Max) AND (NOT Rst_1.EOF))

						valore1 = (Rst_1.Fields.Item("RECORDS").Value)
						valore2 = (Rst_1.Fields.Item("EF").Value)
						
							'  --------------------
							'  distrutto= 2, accantonato= 1
							
										Set objRs = Server.CreateObject("ADODB.Recordset")
											strSQL = "SELECT COUNT(VERBALE_IN) AS Count " &_ 
													 "FROM LEGGE " &_ 
													 "WHERE " &_ 
													 "EF = '"&valore2&"' AND SCELTA = '2' ;"
											objRs.Open strSQL, Connect
											
												If Not (objRs.bof and objRs.eof) then 'Se la query ritorna dati, visualizzo la pagina
													voci_distrutte = (objRs("Count"))
												End If
												
											objRs.Close
										Set objRs = Nothing ' chiudo il recordset

										Set objRs = Server.CreateObject("ADODB.Recordset")
											strSQL = "SELECT COUNT(VERBALE_IN) AS Count " &_ 
													 "FROM LEGGE " &_ 
													 "WHERE " &_ 
													 "EF = '"&valore2&"' AND SCELTA = '1' ;"
											objRs.Open strSQL, Connect
											
												If Not (objRs.bof and objRs.eof) then 'Se la query ritorna dati, visualizzo la pagina
													voci_accantonate = (objRs("Count"))
												End If
												
											objRs.Close
										Set objRs = Nothing ' chiudo il recordset

						'--------------------
'			 
%>
<tr>
	<td><%=valore2%>&nbsp;</td>
    <td><%=valore1%>&nbsp;</td>
    <td><%=voci_distrutte%>&nbsp;</td>
    <td><%=voci_accantonate%>&nbsp;</td>
</tr>
<%


					Rst_1_Min = Rst_1_Min + 1
					Rst_1.MoveNext()
				Wend
%>
</table>
<%
			End If
			
		Rst_1.Close
	Set Rst_1 = Nothing

%>

Questo è il risultato ottenuto: http://www.caprioli.info/fitness/script/test.asp
 
BINGO!!!
Ho provato lo script che mi hai mandato e funziona perfettamente come speravo.
Grazie tante.
Se un giorno dovessimo incontrarci, ti offrirò volentieri un caffè.:byebye:
 

Discussioni simili