[Access] Errore somma con data

sabato 04 giugno 2005 - 20.27

Juwan Profilo | Junior Member

Salve ragazzi, ho un problema con due semplici tabelle, dove in una c'è
l'elenco di vari garage situati in varie parti d'italia, il prezzo di
parcheggio per una singola macchina nei garage, è gionaliero e varia a
secondo dei garage, l'altra tabella vengono registrati i vari parcheggi
effettuati nei giorni della settimana. Le due tabelle sono legate tra loro,
tramite l'id della tabella garage con il rispettivo valore nella tabella
parcheggio. Le due tabelle sono fatte in questo modo

garage id indirizzo citta nposto prezzo
1 via dei rami Trento 34 ? 30,00
2 via del nano Milano 23 ? 40,00
3 via baffigo Roma 198 ? 15,00
4 Via cristi Roma 20 ? 20,00


parcheggio id data garage automobile
1 15/05/2005 1 1
2 15/05/2005 2 1
3 07/06/2005 3 2
4 19/07/2005 2 3
5 22/05/2005 4 3


.
Io voglio sapere, la somma del prezzo di parcheggio, di tutti i garage che
si trovano a Roma, in cui dal giorno 01/05/2005 al 31/06/2005 sono state
parcheggiate delle macchine.
La query che ho fatto è la seguente:

SELECT Sum(G.prezzo) AS SommaDiprezzo
FROM garage AS G, parcheggio AS P
WHERE G.citta=['Inserisci città'] And G.id=P.garage and P.data between
01/05/2005 and 31/06/2005;

La cosa strana è che non viene rilevata nessuna somma, spero che qualcuno
potrà aiutarmi nel capire l'errore, grazie ;-)

lbenaglia Profilo | Guru

> Io voglio sapere, la somma del prezzo di parcheggio, di tutti i garage che
> si trovano a Roma, in cui dal giorno 01/05/2005 al 31/06/2005 sono state
> parcheggiate delle macchine.
> La query che ho fatto è la seguente:
>
> SELECT Sum(G.prezzo) AS SommaDiprezzo
> FROM garage AS G, parcheggio AS P
> WHERE G.citta=['Inserisci città'] And G.id=P.garage and P.data between
> 01/05/2005 and 31/06/2005;
>
> La cosa strana è che non viene rilevata nessuna somma, spero che qualcuno
> potrà aiutarmi nel capire l'errore, grazie ;-)

Ciao Juwan,

prima di tutto ti suggerisco di utilizzare la clausola JOIN per stabilire una relazione logica tra le due tabelle dato che la sintassi che hai utilizzato non aderisce allo standard ANSI.
Inoltre in questo modo utilizzerai la clausola WHERE solo per introdurre dei filtri e non per stabilire relazioni, ottenendo un codice molto più chiaro.
Inoltre in Access le date vanno passate nel formato americano e racchiuse tra il simbolo di cancelletto "#", ovvero #MM/DD/YYYY#.
In base a quanto detto la nuova query sarà:

SELECT Sum(G.prezzo) AS SommaDiprezzo
FROM garage AS G INNER JOIN parcheggio AS P
ON G.id=P.garage
WHERE G.citta=['Inserisci città']
AND P.data between #05/01/2005# AND #06/31/2005#;

Vedrai che così funziona ;-)

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://mvp.support.microsoft.com
http://italy.mvps.org

Juwan Profilo | Junior Member

Grazie dell'aiuto ho visto che mettendo la data in formato americano e tra le # funziona, ma non funziona lo stesso tra il between della mia query :-(

lbenaglia Profilo | Guru

> Grazie dell'aiuto ho visto che mettendo la data in formato americano e tra le # funziona

Bene...

> ma non funziona lo stesso tra il between della mia query :-(

Funziona o non funziona? :-)
Qual è il problema?

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://mvp.support.microsoft.com
http://italy.mvps.org

phate Profilo | Newbie

>SELECT Sum(G.prezzo) AS SommaDiprezzo
>FROM garage AS G INNER JOIN parcheggio AS P
>ON G.id=P.garage
>WHERE G.citta=['Inserisci città']
>AND P.data between #05/01/2005# AND #06/31/2005#;

Prova senza between (anche se non capisco perchè non funziona). Fai così:

SELECT Sum(G.prezzo) AS SommaDiprezzo
FROM garage AS G INNER JOIN parcheggio AS P
ON G.id=P.garage
WHERE G.citta=['Inserisci città']
AND P.data > #05/01/2005#
AND P.data < #06/31/2005#;

Ciao

lbenaglia Profilo | Guru

>>SELECT Sum(G.prezzo) AS SommaDiprezzo
>>FROM garage AS G INNER JOIN parcheggio AS P
>>ON G.id=P.garage
>>WHERE G.citta=['Inserisci città']
>>AND P.data between #05/01/2005# AND #06/31/2005#;
>
>Prova senza between (anche se non capisco perchè non funziona). Fai così:
>
>SELECT Sum(G.prezzo) AS SommaDiprezzo
>FROM garage AS G INNER JOIN parcheggio AS P
>ON G.id=P.garage
>WHERE G.citta=['Inserisci città']
>AND P.data > #05/01/2005#
>AND P.data < #06/31/2005#;


Ciao phate,

La query che hai scritto *non è* equivalente alla mia, dato che l'operatore BETWEEN include anche gli estremi.
Un vecchio proverbio iniziava dicendo: "30 giorni ha novembre con aprile *GIUGNO* e settembre..." ;-)

Prova questa query:

SELECT Sum(G.prezzo) AS SommaDiprezzo
FROM garage AS G INNER JOIN parcheggio AS P
ON G.id=P.garage
WHERE G.citta=['Inserisci città']
AND P.data BETWEEN #05/01/2005# AND #06/30/2005#;

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://mvp.support.microsoft.com
http://italy.mvps.org

??? Profilo | Newbie

facile prova a mettere >= e <= invece di beetwen

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