2017-08-02 106 views
1

返回0,当我运行此查询:总和在钱列

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

我得到一些结果一样

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

然而,当我试图得到一个总(为amount列)使用这个查询;

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

我得到这些结果。

id    howMany Total 
035    2  0.00 

我希望得到

id    howMany Total 
035    2  -057241.38 

我试图简化查询,不计,只是为了检查和工作

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

但同样这给me 0 as total total

id  Total 
035  0.00 

我也试过这个id,它们的金额列中有正值,但是得到相同的行为。为了说明问题,我希望整个表格中的每个idamount列中的值的总数不仅仅是每行,而且在SQL中使用SUM函数时只能得到零。

我注意到的另一件事,id列是nvarchar,而不是表的ID /密钥。这是一个旧数据库,由于某种原因,它支持仅通过主键链接nvarchars。我无法更改表格结构。

架构

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

你运行SQL Server Management Studio中的这个查询还是通过一个应用程序?我的第一个猜测是应用程序正在改变价值。 –

+0

我正在通过SSMS运行。该应用程序将不会改变这些值 –

+1

你从一个简单的SQL得到什么: SELECT [ID],[金额] 从交易 其中id =“035” ,哪些数据类型是多少? – SAS

回答

2

尝试转换为数值做和之前:选择ID,SUM(数量),SUM(转换(数字(18,2),金额))

+0

我很想知道在什么情况下这是必需的。如果给sum()一个无效的数据类型,你应该得到错误“操作数数据类型$ foo对sum操作符无效。” – JeffUK

+0

钱不是一个确切的数据类型,但仍然,我同意..但我在2012年得到正确的总和。 – SAS

+0

我认为这是确切的,但+ - 55000比不准确 – JeffUK