2012-06-14 3 views
1

J'ai une requête retournant 2 colonnes et plusieurs lignes. Comment est-ce que je retourne seulement une valeur de somme qui n'est pas 0 ou nulle?Comment renvoyer uniquement des valeurs non nulles à partir d'une instruction de sélection Select

Table « audit » est comme ceci:

parent_link integer; 
dr   smallint 
amount  decimal(18,2) 

select parent_link, sum(case dr when 1 then amount else -amount end) 
from audit where books = 3 group by parent_link 

Je vérifie pour voir si les valeurs placées dans la balance de la colonne de montant pour valeurs 1 et 0 dans la colonne dr.

Cette requête fonctionne et renvoie quelques milliers de lignes avec 0 comme résultat et 2 avec une valeur dans la somme. Je veux seulement retourner les lignes avec une valeur pour la somme.

Toute aide serait grandement appréciée.

Répondre

9

Utilisation having:

select parent_link, sum(case dr when 1 then amount else -amount end) 
from audit 
where books = 3 
group by parent_link 
having sum(case dr when 1 then amount else -amount end) <> 0 
+0

fonctionne parfaitement. Merci beaucoup pour votre aide!! – user1455790

+1

Si la réponse est correcte, n'oubliez pas de mettre la question à répondu et ajouter par hasard un vote. Nous sommes ici pour manger point :) – AngeloBad

1

Aussi, essayez une requête comme ceci: (il ne nécessite pas de calculs supplémentaires)

SELECT _inner._SUM FROM 
(
    SELECT parent_link, SUM(CASE dr WHEN 1 THEN amount ELSE -amount END) AS _SUM 
     FROM audit WHERE books = 3 GROUP BY parent_link 
) AS _inner 
WHERE _inner._SUM <> 0 
Questions connexes