我收到此错误

问题描述 投票:0回答:5

DECLARE @year VARCHAR(4); DECLARE @month VARCHAR(2); -- START OF CONFIGURATION SECTION -- THIS IS THE ONLY SECTION THAT SHOULD BE MODIFIED -- SET THE YEAR AND MONTH PARAMETERS SET @year = '2013'; SET @month = '3'; -- 1 = January.... 12 = Decemeber. -- END OF CONFIGURATION SECTION DECLARE @startDate DATE DECLARE @endDate DATE SET @startDate = @year + '-' + @month + '-01 00:00:00'; SET @endDate = DATEADD(MONTH, 1, @startDate); SELECT DATEPART(YEAR, dateTimeStamp) AS [Year] , DATEPART(MONTH, dateTimeStamp) AS [Month] , COUNT(*) AS NumStreams , [platform] AS [Platform] , deliverableName AS [Deliverable Name] , SUM(billableDuration) AS NumSecondsDelivered FROM DeliveryTransactions WHERE dateTimeStamp >= @startDate AND dateTimeStamp < @endDate GROUP BY DATEPART(YEAR, dateTimeStamp) , DATEPART(MONTH, dateTimeStamp) , [platform] , deliverableName ORDER BY [platform] , DATEPART(YEAR, dateTimeStamp) , DATEPART(MONTH, dateTimeStamp) , deliverableName


SUM(billableDuration)
的问题吗?要找出答案,请尝试评论该行,看看它是否有效。

可能是总和超过最大值。如果是这样,请尝试替换为
int
sql sql-server t-sql
5个回答
144
投票
非常简单:

SUM(CAST(billableDuration AS BIGINT))

改变

Use COUNT_BIG(*) AS NumStreams


38
投票
SUM(billableDuration) AS NumSecondsDelivered

根据您的需要。

总和表达式所得类型与所使用的数据类型相同。它在溢出时会引发错误。因此,将列施放到更大的容量数据类型,然后使用总和操作效果很好。
    

21
投票
来解决错误。

sum(cast(billableDuration as bigint))

弥补您的引用文本是确切的文本,其中一列无法完成您想要的数学计算。 双击错误,它将突出显示引起问题的行(如果与发布的内容不同,则可能不会在那里);我用变量测试了您的代码,没有问题,这意味着这些列之一(我们不知道更多的特定信息)正在创建此错误。

需要将您的一种表达式施放/转换为INT,以使其经过此操作,这是
sum(cast(billableDuration as numeric(12, 0)))

.

的含义。


午餐(cast(billableduration as Bigint))


2
投票
SELECT DATEPART(YEAR, dateTimeStamp) AS [Year] , DATEPART(MONTH, dateTimeStamp) AS [Month] , COUNT(*) AS NumStreams , [platform] AS [Platform] , deliverableName AS [Deliverable Name] , SUM(billableDuration) AS NumSecondsDelivered


1
投票
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.