在SQL中对具有多个数据类型的列求和

在SQL中对具有多个数据类型的列求和,sql,sql-server,Sql,Sql Server,我对SQL相当陌生,正在尝试在SQL server中编写一个查询,以获取每周的文档总数。我的查询如下所示: SELECT [table].[week], SUM(ISNULL([table].[documents],0)) FROM [table] JOIN (VALUES (15,187293),...other pairs...,(127,120918)) AS Outside ([ID],[Organization]) ON Outside.[ID]=

我对SQL相当陌生,正在尝试在SQL server中编写一个查询,以获取每周的文档总数。我的查询如下所示:

SELECT 
    [table].[week],
    SUM(ISNULL([table].[documents],0))
FROM 
    [table]
JOIN 
    (VALUES (15,187293),...other pairs...,(127,120918)) AS Outside ([ID],[Organization]) ON Outside.[ID]=[table].[ID]
                                 AND Outside.[Organization] = [table].[Organization]
GROUP BY 
    week
同样的查询在每周输出文档的不同表(格式完全相同)上工作,但是当我在这个表上运行它时,我得到了错误

Msg 245,第16级,状态1,第2行
将varchar值“#N/A”转换为数据类型int时,转换失败


“文档”列中没有类似于“N/A”的内容。如何正确计算此总和?

要查找有问题的行,请运行查询:

select t.*
from table t
where id = '#N/A' or organization = '#N/A';
或者更好:

select t.*
from table t
where try_convert(int, id) is null or try_convert(int, organization) is null;

您可以通过在
外部
值集中使用适当的类型来解决此问题。也就是说,其中一个或两个值应该用单引号引起来,因此它们是字符串而不是数字。

它告诉您表中有值
“#N/A”
,并且转换为
int
失败。这并不奇怪,该值不是一个数字。猜测一下,
ID
organization
是th数据类型
varchar
。如果要存储数值,则应使用数值数据类型,而不是
varchar
varchar
不是一种一刀切的数据类型。