2012-02-01 314 views
0

如何获取SQL Server 2005中money数据类型的列的总和?sql中的金额(数据类型)总和

我得到一个错误

操作数的数据类型为nvarchar是和运营商无效。

当我使用

sum(AmountSold) as Amount 

提前感谢!

完整查询是这样的:不按此处添加组,因为它列出了超过15列。

SELECT *, 
     COUNT(RepDailyCollection.CommunityID)    AS DaysinTown, 
     SUM(CAST(RepDailyCollection.AmountSold AS MONEY)) AS TownValue, 
     SUM(RepDailyCollection.Spots)      AS Spots, 
     SUM(RepDailyCollection.AmountCollected)   AS Collected, 
     CommuniTee.StartDate        AS StartDate, 
     Community.EndDate         AS EndDate, 
     Community.IsClosed        AS TownStatus 
FROM Community 
     INNER JOIN RepDailyCollection 
     ON RepDailyCollection.CommunityID = Community.CommunityID 
WHERE Community.RepID = @RepID 

此外,通过编辑创建表查询

CREATE TABLE [dbo].[RepDailyCollection](
[RepDailyCollectionID] [bigint] IDENTITY(7500,1) NOT NULL, 
[RepDailyInfoID] [bigint] NOT NULL, 
[CommuniTeeID] [int] NULL, 
[AmountSold] [money] NULL, 
[AmountCollected] [money] NULL, 
[Spots] [nvarchar](50) COLLATE Latin1_General_CI_AI NULL, 
[IsCleared] [bit] NOT NULL, 
[PaymentMethod] [nvarchar](50) COLLATE Latin1_General_CI_AI NULL, 
[CheckNumber] [bigint] NULL, 
[Invoice] [nvarchar](50) COLLATE Latin1_General_CI_AI NULL, 
[TypeofCreditCard] [nvarchar](30) COLLATE Latin1_General_CI_AI NULL, 
[OrderID] [int] NULL, 
[NewCompanyName] [nvarchar](100) COLLATE Latin1_General_CI_AI NULL, 
[PaymentDate] [datetime] NULL 
) ON [PRIMARY] 
+2

所以'AmountSold'必须是'nvarchar'数据类型不'money'然后。 – 2012-02-01 21:52:44

+2

答案出现在错误消息 – msmucker0527 2012-02-01 21:54:19

+0

'exec sp_help'RepDailyCollection''的输出是什么?您还正在总结其他两列可能导致此错误的列。 – 2012-02-01 22:12:17

回答

3

如果您正在使用nvarchar为您的数据类型,你不能使用聚合函数SUM()。该错误指出您的AmountSold列的数据类型为nvarchar,而不是money

如果您AmountSold列不会的nvarchar形式创建数字数据,你可以这样做:

sum(cast(AmountSold as money)) 

编辑:看你CREATE TABLE命令后,你的问题是,Spotsnvarchar数据类型并且您正试图拨打Spots致电sum()。这就是你得到错误的原因。

如果Spots并创造数字数据,那么你需要做的:

sum(cast(Spots as int)) 
+0

如果包含数字可以投到钱...不是吗? – danihp 2012-02-01 21:54:42

+0

@Shark我拥有AmountSold的数据类型作为金钱。 – Ram 2012-02-01 21:58:37

+2

@Ram:不,你不这样做 - 否则你不会得到这个错误信息....我建议你再检查一下 - 那个列肯定是** NOT **的类型'money'(或者实际上是错误的涉及其他一些'SUM'操作在你的查询某处.....) – 2012-02-01 22:00:09