Gestione del Sum

lunedì 10 maggio 2010 - 18.49

trinity Profilo | Guru

Salve ragazzi,
vorrei postare una domanda la cui soluzione ora mi sfugge....faccio un esempio..

ho queste tre tabelle:

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

poi abbiamo i seguenti dati:

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

allora io dovrei avere come risultato dalla mia select il seguente valore:

codalbergo,codcomune,letti
1,59032,12

invece con la select che vi posto mi escono 60 letti anzichè 12 in pratica da come ho capito prende i 5 movimenti della tabella "archivio_mov_new" e li moltiplica per il valore dei letti.

SELECT Alb.Codalb,Sum(An.nrletti + An.nrlettiextra) AS Letti FROM Albergo AS Alb INNER JOIN Anagrafica_camere AS An ON Alb.Codalb = An.codalbergo AND Alb.CodComune = An.codicecomune INNER JOIN Archivio_mov_new As Arc ON Alb.Codalb=Arc.codalbergo AND Alb.CodComune=Arc.codcomalbergo GROUP BY Alb.Codalb, Alb.CodComune

dove sbaglio?

grazie e ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

lbenaglia Profilo | Guru

>dove sbaglio?
Beh, la seconda INSERT ha il nome della tabella e della colonna codice comune errate (rispetto alla sua definizione)...
Per quale motivo interroghi anche la tabella Archivio_mov_new se non è presente alcuna sua colonna nella SELECT list, WHERE o GROUP BY?
Togliendo l'ultima JOIN otterrai il risultato richiesto.

>grazie e ciao
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

trinity Profilo | Guru

>Togliendo l'ultima JOIN otterrai il risultato richiesto.
ops mi sono dimenticato un pezzo della select sorry :(
l'ultima join ossia quella di Archivio_mov_new mi serve perchè io devo calcolare il totale letti solo se ci sono dei movimenti dell'albergo in questa tabella nel periodo indicato...

SELECT Alb.Codalb,Sum(An.nrletti + An.nrlettiextra) AS Letti
FROM Albergo AS Alb
INNER JOIN
Anagrafica_camere AS An
ON Alb.Codalb = An.codalbergo AND Alb.CodComune = An.codicecomune
INNER JOIN
Archivio_mov_new As Arc
ON Alb.Codalb=Arc.codalbergo AND Alb.CodComune=Arc.codcomalbergo
WHERE Arc.DataArrivo between '01-05-2010' and '30-05-2010'
GROUP BY Alb.Codalb, Alb.CodComune

ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

lbenaglia Profilo | Guru

>ops mi sono dimenticato un pezzo della select sorry :(
>l'ultima join ossia quella di Archivio_mov_new mi serve perchè
>io devo calcolare il totale letti solo se ci sono dei movimenti
>dell'albergo in questa tabella nel periodo indicato...

SELECT Alb.Codalb , Alb.CodComune , SUM(An.nrletti + An.nrlettiextra) AS Letti FROM dbo.Albergo AS Alb JOIN dbo.Anagrafica_camere AS An ON Alb.Codalb = An.codalbergo AND Alb.CodComune = An.codicecomune WHERE EXISTS( SELECT * FROM dbo.Archivio_mov_new WHERE codalbergo = Alb.Codalb AND codcomalbergo = Alb.CodComune AND DataArrivo BETWEEN '20100501' AND '20100530' ) GROUP BY Alb.Codalb, Alb.CodComune; /* Output: Codalb CodComune Letti ----------- ----------- ----------- 1 59032 12 (1 row(s) affected) */

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

trinity Profilo | Guru

Grazie mille funziona
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5