我有一个返回ProductName
,Qty
和其他列
定义为:
SELECT ProductName, Qty, /* etc. */
FROM SomeConcreteTable
SomeConcreteTable
将ProductName
定义为nvarchar(40)
,将Qty
定义为float
。
SELECT ProductName, SUM(Qty)
FROM MyView
GROUP BY ProductName
这会导致错误
操作数数据类型nvarchar对sum运算符
无效
当视图没有返回任何行时,修改视图的WHERE
条件以便它返回行时没有错误。
SELECT ProductName, SUM(COALESCE(vStarts.LotQty, 0))
FROM MyView
GROUP BY ProductName
无论视图是否返回行,都可以工作。
在this post中,Lieven Keersmaekers说在查询中使用匿名类型具有相同的问题,因为不能推断出类型计数。
有道理。
但是,在我的情况下,不应推断类型 - 它们来自表格。
不要问这样一个经常被滥用的问题,但这是一个错误吗?
似乎出乎意料的行为是,当求和对可空浮点(而不是varchar)时,没有行的求和会产生此错误。
Microsoft SQL Server 2012(SP1) - 11.0.3482.0(X64)
答案 0 :(得分:4)
你应该首先投射你的专栏,它会起作用
SELECT SUM(CAST(Qty as int)) // change to desired type, int for example purposes only
答案 1 :(得分:0)
您的视图定义可能是MyView CAST或CONVERT将数量从FLOAT转换为NVARCHAR。您可能必须将其CAST / CONVERT回到SUM。
答案 2 :(得分:0)
我解决了这个问题,但没找到原因。
在"尝试随机的东西"在故障排除阶段,我在SSMS中打开了视图,并将FROM
行更改为使用显式Database.Schema.Table
表示法。
即使没有先前要求的COALESCE
,也不会再出现错误。
我改回了隐式语法。仍然有效。
:耸耸肩:有什么想法吗?
答案 3 :(得分:-1)
我遇到了同样的问题,解决方案很简单:
总和( 0 +数量)