2012-02-01 4 views
0

Как получить сумму столбца money типа данных в SQL Server 2005?Сумма денег (datatype) в 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' тогда. –

+2

Ответ в сообщении об ошибке – msmucker0527

+0

Каков вывод 'exec sp_help 'RepDailyCollection''? Вы также суммируете 2 других столбца, которые могут вызвать эту ошибку. –

ответ

3

Если вы используете nvarchar в качестве типа данных, вы не можете использовать агрегатную функцию SUM(). Ошибка указывает, что тип данных вашего столбца AmountSold равен nvarchar, а не money.

Если AmountSold столбца действительно создает числовые данные в виде nvarchar, вы можете сделать это:

sum(cast(AmountSold as money)) 

EDIT: После просмотра вашей команды CREATE TABLE, ваша проблема в том, что Spots имеет nvarchar типа данных и вы пытаетесь позвонить sum() по телефону Spots. Вот почему вы получаете ошибку.

Если Spots действительно создает числовые данные, то вам необходимо сделать следующее:

sum(cast(Spots as int)) 
+0

, если цифры могут быть отлиты от денег ... нет? – danihp

+0

@Shark У меня есть тип данных AmountSold как деньги. – Ram

+2

@Ram: Нет, вы этого не сделаете - в противном случае вы не получите это сообщение об ошибке .... Я предлагаю вам проверить еще раз - этот столбец определенно ** NOT ** типа 'money' (или ошибка на самом деле касается какой-либо другой операции 'SUM' в вашем запросе где-то .....) –