Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Query Sql con all'interno un'operazione matematica
mercoledì 13 dicembre 2006 - 10.45
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
trinity
Profilo
| Guru
3.465
messaggi | Data Invio:
mer 13 dic 2006 - 10:45
Ciao Ragazzi,
ho scritto la seguente riga di codice in sql:
SELECT SUM(ncomp)
AS Ncomp
FROM dbo.Archivio_mov
WHERE
codalbergo IN (@Codalbergo)
GROUP BY
stato
il risultato è corretto mi riporta 2 righe con due valori corretti per il mio scopo.
Solo che vorrei far fare direttamente la procedura di sottrazione del valore della prima riga con quello della seconda che la query mi riporta direttamente nella query stessa(scusate il gioco di parole) in modo tale da ottente direttamente il valore finale, esempio:
la query mi restituisce i seguenti valori;
25
13
io successivamente dovrei fare una sottrazione tra 25-13 per ottenere come risultato 12..posso farlo direttamente nella query postata sopra?
Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
ysdemarc
Profilo
| Expert
587
messaggi | Data Invio:
gio 14 dic 2006 - 10:18
Da quel poco sql che so non penso che così tu possa farlo poichè crei in questo modo una tabella di dati che poi leggi tramite cursore
se vuo ifarlo con una query secca visto che hai solo 2 tipi di satto potresti fare così:
SELECT SUM(A1.ncomp) - SUM(A2.ncomp) AS Ncomp
FROM dbo.Archivio_mov A1
INNER JOIN dbo.Archivio_mov A2
ON A2.codalbergo = A2.codalbergo
WHERE A1.codalbergo IN (@Codalbergo)
AND A1.stato = @stato_di_a1
AND A2.stato = @stato_di_a2
altrimenti l'unica soluzione che mi viene in mente è un'elaborazione da codice o da sql con fetch cursori e quant'altro che però sarei curioso di provare
Ciao
Vincenzo
Programmatore sbilenco
trinity
Profilo
| Guru
3.465
messaggi | Data Invio:
gio 14 dic 2006 - 15:29
Ma io i dati li ho in una sola tabella non in due quindi il join non serve.
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
gigi_sullivan
Profilo
| Newbie
3
messaggi | Data Invio:
gio 14 dic 2006 - 15:53
Ciao
usi sqlserver? access? db2?
>SELECT SUM(ncomp)
>AS Ncomp
>FROM dbo.Archivio_mov
>WHERE
>codalbergo IN (@Codalbergo) -------perche' non fai direttamente codalbergo = @Codalbergo
>GROUP BY
>stato
>il risultato è corretto mi riporta 2 righe con due valori corretti
>per il mio scopo.
Se ho capito bene.. hai solo due stati per quel codice.
Se e' cosi' sempre (e ripeto:sempre 2) puoi fare:
declare @a int, @b int
SELECT @a = SUM(ncomp)
FROM @tab
WHERE
codalbergo = @Codalbergo
and stato = 'A' -- invece della group fai stato = 'primo stato'
SELECT @b = SUM(ncomp)
FROM @tab
WHERE
codalbergo = @Codalbergo
and stato = 'b'
select @a
union
select @b
union
select @a - @b
Se gli stati sono di piu' devi dire almeno tra chi vuoi la differenza.. chi e' il primo, e chi deve sottrarre (di cui puoi fare la somma) per cui la seconda parte della qry diventerebbe:
SELECT @b = SUM(ncomp)
FROM @tab
WHERE
codalbergo = @Codalbergo
and stato <> 'a'
e tutto il resto come prima
Ciao
trinity
Profilo
| Guru
3.465
messaggi | Data Invio:
gio 14 dic 2006 - 15:59
Utilizzo sql server express 2005.
Sono sempre due ma utilizzo il group by per questo motivo ti faccio vedere un esempio dei record salvati in archivio
codalb stato ncomp situazione
1 ITALIA 10 ARRIVATI
1 ITALIA 7 PARTITI
1 GERMANIA 12 ARRIVATI
1 GERMANIA 8 PARTITI
allora io debbo ottenere nella query la somma di tutti gli arrivati, la somma di tutti i partiti e poi devo effettuare la differenza tra il totale arrivati meno il totale partiti ed ottenere il risultato
Ecco tutto questo vorrei farlo mediante una query sql.
Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
gigi_sullivan
Profilo
| Newbie
3
messaggi | Data Invio:
gio 14 dic 2006 - 16:03
..allora fai le sostituzioni del caso nella query di sopra e vedrai che andra' tutto bene.
Se mi dici i dati precisi te la scrivo io.
declare @a int, @b int
SELECT @a = SUM(ncomp)
FROM dbo.Archivio_mov
WHERE
codalbergo = @Codalbergo
and stato = 'il tuo primo stato'
SELECT @b = SUM(ncomp)
FROM dbo.Archivio_mov
WHERE
codalbergo = @Codalbergo
and stato = 'il tuo secondo stato'
select @a, 'il tuo primo stato'
union
select @b, 'il tuo secondo stato'
union
select @a - @b, 'differenza'
trinity
Profilo
| Guru
3.465
messaggi | Data Invio:
gio 14 dic 2006 - 16:07
Utilizzo sql server express 2005.
Sono sempre due ma utilizzo il group by per questo motivo ti faccio vedere un esempio dei record salvati in archivio
codalb stato ncomp situazione
1 ITALIA 10 ARRIVATI
1 ITALIA 7 PARTITI
1 GERMANIA 12 ARRIVATI
1 GERMANIA 8 PARTITI
allora io debbo ottenere nella query la somma di tutti gli arrivati, la somma di tutti i partiti e poi devo effettuare la differenza tra il totale arrivati meno il totale partiti ed ottenere il risultato.
tieni presente che la tabella si chiama Movimenti e che il nome delle colonne è lo stesso che ho indicato in alto sull'esempio
Ecco tutto questo vorrei farlo mediante una query sql.
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
gigi_sullivan
Profilo
| Newbie
3
messaggi | Data Invio:
gio 14 dic 2006 - 16:15
declare @tbl table
(Ncomp int, ordColumn int)
declare @arrivati int, @partiti int
SELECT @arrivati = SUM(ncomp)
FROM dbo.Movimenti
WHERE
codalb = @Codalbergo
and situazione = 'ARRIVATI'
SELECT @partiti = SUM(ncomp)
FROM dbo.Movimenti
WHERE
codalb = @Codalbergo
and situazione = 'PARTITI'
insert into @tbl
select @arrivati, 1
union
select @partiti, 2
union
select @arrivati - @partiti, 3
select Ncomp from @tbl
order by ordColumn
ysdemarc
Profilo
| Expert
587
messaggi | Data Invio:
ven 15 dic 2006 - 11:46
> Ma io i dati li ho in una sola tabella non in due quindi il join non serve.
E che significa?
Nessuno vieta di mettere in join una tabella con se stessa.
I tuoi tipi sono due quindi se rimangono tali allora mi sembra la soluzione più valida e breve.
Poi vedi un pò tu.
Ciao
Vincenzo
Programmatore sbilenco
trinity
Profilo
| Guru
3.465
messaggi | Data Invio:
ven 15 dic 2006 - 16:35
Allora ecco in sintesi la struttura della mia tabella con i dati dentro
codalb stato ncomp situazione
1 ITALIA 10 ARRIVATI
1 ITALIA 7 PARTITI
1 GERMANIA 12 ARRIVATI
1 GERMANIA 8 PARTITI
allora io debbo ottenere nella query la somma di tutti gli arrivati, la somma di tutti i partiti e poi devo effettuare la differenza tra il totale arrivati meno il totale partiti ed ottenere il risultato
il tuo primo esempio è stato il seguente:
SELECT SUM(A1.ncomp) - SUM(A2.ncomp) AS Ncomp
FROM dbo.Archivio_mov A1
INNER JOIN dbo.Archivio_mov A2
ON A2.codalbergo = A2.codalbergo
WHERE A1.codalbergo IN (@Codalbergo)
AND A1.stato = @stato_di_a1
AND A2.stato = @stato_di_a2
con il join come potrei ottente il mio risultato
Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
ysdemarc
Profilo
| Expert
587
messaggi | Data Invio:
ven 15 dic 2006 - 18:23
codalb stato ncomp situazione
1 ITALIA 10 ARRIVATI
1 ITALIA 7 PARTITI
1 GERMANIA 12 ARRIVATI
1 GERMANIA 8 PARTITI
andrebbe modificata così:
SELECT SUM(A1.ncomp) - SUM(A2.ncomp) AS Ncomp
FROM dbo.Archivio_mov A1
INNER JOIN dbo.Archivio_mov A2
ON A2.codalbergo = A2.codalbergo
AND A2.Stato = A1.Stato
WHERE A1.codalbergo IN (@Codalbergo)
AND A1.Sistuazione = 'ARRIVATI'
AND A2.Situazione = 'PARTITI'
Vincenzo
Programmatore sbilenco
Torna su
Stanze Forum
Elenco Threads
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 !