PDA

View Full Version : [SQLSERVER] Differenza tra somme


Peca's
03-04-2010, 15:16
Salve a tutti,

ho scritto 2 query che singolarmente fanno la somma di alcuni valori in 2 tabelle diverse e vorrei ora fare la fifferenza tra le 2:

Ecco cosa ho scritto ma sqlserver mi genera errore sul segno meno(-):
(SELECT CAST(SUM(importo) AS NUMERIC(13, 2)) FROM importi
GROUP BY importi.cod) as importo
-
(SELECT CAST(SUM(costi) AS NUMERIC(13, 2)) FROM costi
GROUP BY costi.cod) as costo

Con che sostituisco il simbolo meno che proprio non riesce a digerire?

Grazie!

gugoXX
03-04-2010, 16:13
Prova cosi'


SELECT importi.cod,
CAST(SUM(ImportoGrp) - SUM(CostoGrp) as NUMERIC(13,2)) as GuadagnoGrp,
SUM(ImportoGrp), -- facoltativo, solo per controllo
SUM(CostoGrp) -- facoltativo, solo per controllo
FROM importi JOIN costi ON (importi.cod=costi.cod)
GROUP BY importi.cod

cionci
05-04-2010, 09:25
Se i due valori non provengono dal tabelle correlate:

SELECT A.A - B.B As Differenza
FROM
(SELECT CAST(SUM(importo) AS NUMERIC(13, 2)) As A FROM importi
GROUP BY importi.cod) as importo) As A,
(SELECT CAST(SUM(costi) AS NUMERIC(13, 2)) As B FROM costi
GROUP BY costi.cod) as costo) As B;

Ora, chiaramente dipende un po' dal DBMS se possa funzionare o meno.

gugoXX
05-04-2010, 09:42
Se i due valori non provengono dal tabelle correlate:

SELECT A.A - B.B As Differenza
FROM
(SELECT CAST(SUM(importo) AS NUMERIC(13, 2)) As A FROM importi
GROUP BY importi.cod) as importo) As A,
(SELECT CAST(SUM(costi) AS NUMERIC(13, 2)) As B FROM costi
GROUP BY costi.cod) as costo) As B;

Ora, chiaramente dipende un po' dal DBMS se possa funzionare o meno.

E, ma cosi' ho paura che si generi un prodotto cartesiano, i cui risultati possono avere poco senso.

cionci
05-04-2010, 10:39
E, ma cosi' ho paura che si generi un prodotto cartesiano, i cui risultati possono avere poco senso.
Ops non avevo visto il group by...credevo che fosse una tabella composta da una sola tupla...