Errore nell' istruzioni SELECT per l'assegnazione di valori....

lunedì 23 aprile 2007 - 10.57

trinity Profilo | Guru

salve ragazzi
io ho questa stored procedure:

ALTER PROCEDURE [dbo].[GetPresenti] ( @Codalbergo Int, @CodComAlb Int, @CodStato Varchar(3), @CodComune Int ) AS DECLARE @arrivati Int,@partiti Int BEGIN SELECT @arrivati = SUM(ncomp) FROM dbo.Archivio_mov WHERE Codalbergo = @Codalbergo AND CodComAlb=@CodComAlb AND codstato=@CodStato AND codcomune=@Codcomune AND Stato = 'A' OR Stato = '0' SELECT @partiti = SUM(ncomp) FROM dbo.Archivio_mov WHERE Codalbergo = @Codalbergo AND CodComAlb=@CodComAlb AND codstato=@CodStato AND codcomune=@Codcomune AND Stato = 'P' OR Stato='1' if @partiti Is Null select @partiti = 0 SELECT (@arrivati - @partiti) AS Ncomp END

la quale mi funziona perfettamente per selezionare il numero totale di persone presenti in un albergo in base al codice stato e comune...

vi faccio capire meglio con un esempio:

ecco una serie di record presenti nella mia tabella:

codice albergo | codice comune dell'albergo| stato |codstato|Comune |Codcomune|nclienti |stato|
000000000001|0000000000001 |ITALIA |ITA |TERRACINA |032 | 11|A |
000000000001|0000000000001 |ITALIA |ITA |TERRACINA |032 | 03|P |
000000000001|0000000000001 |GERMANIA | | | 10|A |

in altre parole la stored mi esegue il controllo e mi dice come valore finale che ci sono presenti 8 persone ITALIANE di Terracina e 10 Tedeschi.

io ora avevo bisogno anche di prendere i loro rispettivi stati e comune

ossia avere come risultato finale oltre che ai valori totali delle presenze anche questo:

Stato |comune |nclienti|
ITALIA TERRACINA 08
GERMANIA 10

allora ho pensato di integrare la stored in questo modo:

ALTER PROCEDURE [dbo].[GetPresenti] ( @Codalbergo Int, @CodComAlb Int, @CodStato Varchar(3), @CodComune Int ) AS DECLARE @arrivati Int,@partiti Int BEGIN SELECT stato_res,comune,@arrivati = SUM(ncomp) FROM dbo.Archivio_mov WHERE Codalbergo = @Codalbergo AND CodComAlb=@CodComAlb AND codstato=@CodStato AND codcomune=@Codcomune AND Stato = 'A' OR Stato = '0' SELECT stato_res,comune,@partiti = SUM(ncomp) FROM dbo.Archivio_mov WHERE Codalbergo = @Codalbergo AND CodComAlb=@CodComAlb AND codstato=@CodStato AND codcomune=@Codcomune AND Stato = 'P' OR Stato='1' if @partiti Is Null select @partiti = 0 SELECT (@arrivati - @partiti) AS Ncomp END

ma mi ha generato il seguente errore:

Le istruzioni SELECT per l'assegnazione di valori alle variabili non devono essere eseguite insieme a operazioni di recupero dei dati.
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

dedalo.nel.labirinto Profilo | Newbie



un metodo veloce per risolvere il tuo problema è quello di dichiarare
altre due variabili nella tua stored, una per lo stato e una per il comune
e valorizzarle in una delle due select, tenendo presente che sum() è
una funzione di aggregazione, quindi dovrai raggruppare per gli altri due campi.

nelle tua select finale potrai aggiungere gli altri due valori che t'interessano:


ALTER PROCEDURE [dbo].[GetPresenti] ( @Codalbergo Int, @CodComAlb Int, @CodStato Varchar(3), @CodComune Int ) AS DECLARE @arrivati Int,@partiti Int -- variabili per stato e comune DECLARE @stato varchar(50) DECLARE @comune varchar(50) BEGIN SELECT @stato = stato_res, @comune= comune, @arrivati = SUM(ncomp) FROM dbo.Archivio_mov WHERE Codalbergo = @Codalbergo AND CodComAlb=@CodComAlb AND codstato=@CodStato AND codcomune=@Codcomune AND Stato = 'A' OR Stato = '0' group by stato_res, comune SELECT @partiti = SUM(ncomp) FROM dbo.Archivio_mov WHERE Codalbergo = @Codalbergo AND CodComAlb=@CodComAlb AND codstato=@CodStato AND codcomune=@Codcomune AND Stato = 'P' OR Stato='1' if @partiti Is Null select @partiti = 0 SELECT @stato as Stato, @comune as Comune, (@arrivati - @partiti) AS Ncomp END



anche se, secondo me, potresti risolvere anche diversamente,
per esempio con un case sullo stato dei clienti e ottenere
direttamente il recorset senza utilizzare variabili.

ciao.
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