2017-08-02 110 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