Gestire un group by

martedì 17 giugno 2008 - 09.32

trinity Profilo | Guru

Salve ragazzi,
io ho creato una tabella temp al cui interno vi sono queste colonne:

CREATE TABLE #tblTemp ( numRow INT , codalbergo INT , codcomune INT , annogestionale Int, data_elaborazione SmallDateTime, data_Arrivo SmallDateTime , data_Partenza SmallDateTime , codnazione int, comune varchar(250), codcategoria int, GGpresenze Int, stato varchar(2) )

dopo averla popolata eseguo alcuni calcoli tramite delle funzioni per ottenere il totale degli arrivati ed il totale delle presenze.

Nota: la colonna STATO può essere popolata da due sigle ossia P(dato pervenuto) oppure NP (dato non pervenuto)

alla fine di tutto scrivo ed eseguo il seguente codice:

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

come risultato mi esce la seguente immagine:

Totarrivi TotPresenze
0 86
50 150


tutto giusto ma io vorrei che uscisse la somma direttamente in un'unica riga.

Se al group by aggiungo anche la voce totpresenze, sql server mi dice che non è una colonna della tabella.

Come posso fare?

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

alx_81 Profilo | Guru

>Salve ragazzi,
Ciao!

>select totarrivi=CASE WHEN stato ='P' THEN Count(data_arrivo)
>ELSE 0 END,Sum(isnull(GGPresenze,dbo.GetGGpresenze(data_arrivo,IsNull(data_partenza,dbo.GetLastDateOfMounth(data_arrivo)))))As
>TotPresenze From #tbltemp
>group by stato

>tutto giusto ma io vorrei che uscisse la somma direttamente in
>un'unica riga.
Per fare ciò, devi utilizzare quella che hai scritto tu come subquery, magari utilizzando una CTE se hai SQL Server 2005:

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

>
>Se al group by aggiungo anche la voce totpresenze, sql server
>mi dice che non è una colonna della tabella.
Questo è corretto, perchè nel momento in cui il motore fa GROUP BY, non sa ancora che cosa sia TotPresenze, dovresti raggruppare per l'effettiva espressione (nel tuo caso - Sum(isnull(GGPresenze,dbo.GetGGpresenze(data_arrivo,IsNull(data_partenza,dbo.GetLastDateOfMounth(data_arrivo))))) ).
E comunque non otterresti quello che ti serve. Raggruppare, non significa "fondere" i due valori che ottieni.

--

Alessandro Alpi | SQL Server MVP

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

trinity Profilo | Guru

grazie fatto!!!



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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5