CREARE UNA CLASSIFICA CON ACCESS

mercoledì 30 aprile 2008 - 13.19

superspasa Profilo | Newbie

Ciao a tutti. Ho creato un file access per la gestione della squadra allievi di un mio amico allenatore. A fine lavoro mi ha chiesto se potevo inserirgli una tabella dove scrivere tutte le partite del campionato con il calcolo automatico del punteggio in base al risultato ed alla conseguente classifica sempre in automatico. Mi sono scervellato ma, forse la stanchezza, non vedo la soluzione. E' forse fattibile la cosa? Grazie
superspasa

alx_81 Profilo | Guru

>Ciao a tutti. Ho creato un file access per la gestione della
>squadra allievi di un mio amico allenatore. A fine lavoro mi
>ha chiesto se potevo inserirgli una tabella dove scrivere tutte
>le partite del campionato con il calcolo automatico del punteggio
>in base al risultato ed alla conseguente classifica sempre in
>automatico. Mi sono scervellato ma, forse la stanchezza, non
>vedo la soluzione. E' forse fattibile la cosa?
Sì è fattibile.. ma è un progetto intero

Mettiti lì con calma e pensa alle entità che ti serviranno. Alle tabelle e alle informazioni che devi avere per ottenere i calcoli che ti interessano. Una volta che ottieni quelle, puoi scrivere le query e l'applicazione per le logiche che la regolano.
Ma come prima cosa, fai una bella analisi di tutto ciò che ti serve, ad esempio la tabella risultati, la tabella delle giornate di campionato, ecc..

>Grazie
di nulla!
Alx81 =)

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

superspasa Profilo | Newbie

Beh, la classifica è quella classica;
una tabella con tutte le partite dove indicare i risultati ed automaticamente calcolare i punti
una tabella che mi ordina e mi aggiorna le squadre a seconda del punteggio ottenuto.
Ma non riesco a coordinare i dati scusami

alx_81 Profilo | Guru

>Beh, la classifica è quella classica;
>una tabella con tutte le partite dove indicare i risultati ed
>automaticamente calcolare i punti
>una tabella che mi ordina e mi aggiorna le squadre a seconda
>del punteggio ottenuto.
>Ma non riesco a coordinare i dati scusami
ma figurati.. è solo che posso esserti di aiuto solo a livello macroscopico..

Comunque, io vedo le seguenti tabelle:

Squadre
IDSquadra intero autoincrementante e chiave primaria
Nome stringa
NumeroGiocatoriRosa intero
... (altri dati che ti servono)

Partite
IDPartita intero autoincrementante e chiave primaria
IDSquadra1 intero
IDSquadra2 intero
Data DataOra
PunteggioSquadra1 intero
PunteggioSquadra2 intero

La classifica può essere una query fatta al volo, senza salvare i dati su di una tabella. L'esempio è SQL SERVER.
La parte che ti interessa è l'ultima query, ricorda che dovrai sostituire la CASE con la funzione IIF (IIF(condizione, allora, altrimenti)):
USE tempdb; GO CREATE TABLE dbo.Squadre ( IDSquadra int IDENTITY(1,1) NOT NULL , Nome varchar(30) NOT NULL , Provenienza varchar(20) NOT NULL , NumeroGiocatori tinyint NOT NULL , CONSTRAINT PK_Squadre PRIMARY KEY CLUSTERED ( IDSquadra ) ) GO CREATE TABLE dbo.Partite ( IDPartita int IDENTITY(1,1) NOT NULL , IDSquadraCasa int NOT NULL , IDSquadraFuori int NOT NULL , Data smalldatetime NOT NULL , RisultatoCasa tinyint NOT NULL , RisultatoFuori tinyint NOT NULL , CONSTRAINT PK_Partite PRIMARY KEY CLUSTERED ( IDPartita ) ) GO INSERT INTO dbo.Squadre (Nome, Provenienza, NumeroGiocatori) VALUES ('U.S. Medesanese', 'Medesano', 20) INSERT INTO dbo.Squadre (Nome, Provenienza, NumeroGiocatori) VALUES ('F.C. Noceto', 'Noceto', 20) INSERT INTO dbo.Squadre (Nome, Provenienza, NumeroGiocatori) VALUES ('A.C. Fornovo', 'Fornovo', 20) INSERT INTO dbo.Squadre (Nome, Provenienza, NumeroGiocatori) VALUES ('Fidentina', 'Fidenza', 20) GO INSERT INTO dbo.Partite (IDSquadraCasa, IDSquadraFuori, Data, RisultatoCasa, RisultatoFuori) VALUES (1, 2, GETDATE(), 2, 0) INSERT INTO dbo.Partite (IDSquadraCasa, IDSquadraFuori, Data, RisultatoCasa, RisultatoFuori) VALUES (2, 1, GETDATE(), 0, 1) INSERT INTO dbo.Partite (IDSquadraCasa, IDSquadraFuori, Data, RisultatoCasa, RisultatoFuori) VALUES (1, 3, GETDATE(), 3, 1) INSERT INTO dbo.Partite (IDSquadraCasa, IDSquadraFuori, Data, RisultatoCasa, RisultatoFuori) VALUES (3, 1, GETDATE(), 1, 2) INSERT INTO dbo.Partite (IDSquadraCasa, IDSquadraFuori, Data, RisultatoCasa, RisultatoFuori) VALUES (1, 4, GETDATE(), 0, 0) INSERT INTO dbo.Partite (IDSquadraCasa, IDSquadraFuori, Data, RisultatoCasa, RisultatoFuori) VALUES (4, 1, GETDATE(), 2, 4) INSERT INTO dbo.Partite (IDSquadraCasa, IDSquadraFuori, Data, RisultatoCasa, RisultatoFuori) VALUES (2, 3, GETDATE(), 1, 1) INSERT INTO dbo.Partite (IDSquadraCasa, IDSquadraFuori, Data, RisultatoCasa, RisultatoFuori) VALUES (3, 2, GETDATE(), 3, 1) INSERT INTO dbo.Partite (IDSquadraCasa, IDSquadraFuori, Data, RisultatoCasa, RisultatoFuori) VALUES (2, 4, GETDATE(), 1, 0) INSERT INTO dbo.Partite (IDSquadraCasa, IDSquadraFuori, Data, RisultatoCasa, RisultatoFuori) VALUES (4, 2, GETDATE(), 2, 2) INSERT INTO dbo.Partite (IDSquadraCasa, IDSquadraFuori, Data, RisultatoCasa, RisultatoFuori) VALUES (3, 4, GETDATE(), 4, 0) INSERT INTO dbo.Partite (IDSquadraCasa, IDSquadraFuori, Data, RisultatoCasa, RisultatoFuori) VALUES (4, 3, GETDATE(), 2, 3) GO ---- casa SELECT T.Squadra , SUM(T.Vinte) AS Vinte , SUM(T.Perse) AS Perse , SUM(T.Nulle) AS Nulle , SUM(T.GolFatti) AS GolFatti , SUM(T.GolSubiti) AS GolSubiti , SUM(T.Vinte * 3 + T.Nulle) AS Punti FROM ( SELECT S.Nome AS Squadra , SUM(CASE WHEN P.RisultatoCasa > P.RisultatoFuori THEN 1 ELSE 0 END) AS Vinte , SUM(CASE WHEN P.RisultatoCasa < P.RisultatoFuori THEN 1 ELSE 0 END) AS Perse , SUM(CASE WHEN P.RisultatoCasa = P.RisultatoFuori THEN 1 ELSE 0 END) AS Nulle , SUM(P.RisultatoCasa) AS GolFatti , SUM(P.RisultatoFuori) AS GolSubiti FROM dbo.Squadre S JOIN dbo.Partite P ON P.IDSquadraCasa = S.IDSquadra GROUP BY S.Nome UNION SELECT S.Nome AS Squadra , SUM(CASE WHEN P.RisultatoCasa < P.RisultatoFuori THEN 1 ELSE 0 END) AS Vinte , SUM(CASE WHEN P.RisultatoCasa > P.RisultatoFuori THEN 1 ELSE 0 END) AS Perse , SUM(CASE WHEN P.RisultatoCasa = P.RisultatoFuori THEN 1 ELSE 0 END) AS Nulle , SUM(P.RisultatoFuori) AS GolSubiti , SUM(P.RisultatoCasa) AS GolFatti FROM dbo.Squadre S JOIN dbo.Partite P ON P.IDSquadraFuori = S.IDSquadra GROUP BY S.Nome ) AS T GROUP BY T.Squadra ORDER BY Punti DESC -- pulizia DROP TABLE dbo.Partite DROP TABLE dbo.Squadre GO

In poche parole faccio una subquery che è l'unione di due altre query che rispettivamente tornano le vinte, le perse, i pareggi, i gol fatti ed i subiti prima in casa e poi fuori. A monte la query "master" raggruppa il risultato della subquery e somma sia i dati ricavati nella query nidificata sia il numero delle vinte e delle nulle per ottenere il punteggio. Se non sbaglio, sostituendo la CASE con la IIF, la query dovrebbe già essere pronta.
Scusami ma non ho access in questo momento..
Ciao!

Alx81 =)

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

superspasa Profilo | Newbie

Grazie a grandi linee ho capito. Adesso ho una base su cui sviluppare il progetto.
Grazie tante.

alx_81 Profilo | Guru

>Grazie a grandi linee ho capito. Adesso ho una base su cui sviluppare
>il progetto.
Scrivimi pure se avrai bisogno ancora..
ciao!


Alx81 =)

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

alexmed Profilo | Guru

Ciao alex,
Sto approfittando anch'io di questa "meraviglia" ma ho un problemino che non riesco a risolvere:
Nella mia tabella "Partite" avrei previsto una colonna TorneoID (per poter gestire più tornei).
Come posso fare per filtrare i risultati a seconda del torneo?


Grazie.

PS.
Per ora ho impostato tutto su SQL Server Compact 4.0.
alexmed

alexmed Profilo | Guru

Risolto.

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

alexmed

schumy2000 Profilo | Junior Member

se ti può servire Superspasa ho scritto qualcosa del genere in modo simile ma a più alto livello.
Ho scritto un applicativo in java per la gestione della serie A e il DB Access

se vuoi posso darti qualche aiuto se pensi di aggiungere altre tabelle e/o campi.
Nel progetto che avevo fatto io c'era la possibilità di inserire, Penalizzazioni [Atalanta docet], Reti, Marcatori ed altro...
Ci ho messo qulacosa come 2-3 mesi però il risultato è soddisfacente...
Scrivi pure se ti serve qlcs questo tema mi affascina sempre :)

-------------------------------------------------------------------------------------------------------------
Talvolta un pensiero mi annebbia l'Io: sono pazzi gli altri o sono pazzo io?
A. Einstein

alexmed Profilo | Guru

ciao schumy,
In questo momento ho fermato il progetto,
Non appena riprendo ti faccio sapere perchè so già che dovrò risolvere due o tre cosette.

Ciao
alexmed
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5