2017-08-02 3 views
1

Quand je lance cette requête:Somme retourne 0 sur une colonne d'argent

SELECT [id],[amount],sum(amount) as Total 
    FROM transaction 
    where id='035' 
    group by id, amount 

Je reçois des résultats comme

id   amount  Total 
035   -55115.24 -55115.24 
035   -2126.14 -2126.14 

Cependant lorsque je tente d'obtenir un total (pour la colonne amount), en utilisant cette requête;

select id, count(*) as howMany, sum(amount) as Total 
from transaction 
where id='035' 
group by id 
order by count(*) desc 

Je reçois ces résultats.

id    howMany Total 
035    2  0.00 

Je vous attendre à obtenir

id    howMany Total 
035    2  -057241.38 

J'ai essayé de simplifier la requête, sans le compte, juste pour vérifier si la somme travaille

select id, sum(amount) as Total 
from transaction 
where id='035' 
group by id 

Mais encore une fois cela donne moi 0 comme mon total

id  Total 
035  0.00 

J'ai aussi essayé ceci sur des id qui ont des valeurs positives dans leur colonne de montant mais obtiennent le même comportement.

Pour clarifier les choses, je voudrais que le total des valeurs de la colonne amount pour chaque id, dans la table, pas seulement chaque ligne, mais je reçois que des zéros lorsque vous utilisez la fonction SUM dans SQL.

Une autre chose que j'ai remarquée, la colonne id est un , pas l'ID/clé pour la table. C'est une ancienne base de données qui favorise simplement lier nvarchars sur les clés primaires, pour une raison quelconque. Je ne peux pas changer la structure de la table.

Schéma

CREATE TABLE [dbo].[transaction](
    [trindex] [int] IDENTITY(1,1) NOT NULL, 
    [id] [varchar](15) NULL, 
    [date] [datetime] NULL, 
    [amount] [money] NULL, 
    [acct] [varchar](20) NULL 
) 
+0

Êtes-vous en cours d'exécution cette requête dans SQL Server Management Studio ou via une application? Ma première hypothèse est qu'une application est en train de changer la valeur. –

+0

J'utilise ceci via SSMS. L'application ne changera pas ces valeurs –

+1

Qu'est-ce que vous obtenez d'un sql simple: SELECT [id], [montant] DE transaction où id = '035' et quel type de données est le montant? – SAS

Répondre

2

Essayez de convertir en numérique avant de faire la somme: select id, SUM (montant), SOMME (conversion (numérique (18,2), montant))

+0

Je serais très intéressé de savoir dans quelles circonstances cela est nécessaire. Si vous donnez à sum() un type de données invalide, vous devriez obtenir l'erreur "Le type de données d'opérande $ foo n'est pas valide pour l'opérateur de somme." – JeffUK

+0

L'argent n'est pas un type de données exact, mais encore, je suis d'accord .. J'obtiens la somme correcte en 2012 cependant. – SAS

+0

Je pense que c'est exact, mais + - 55000 est beaucoup plus que inexact – JeffUK