2016-06-16 183 views
1

有如下一种观点:我如何总结一个位列?

select t1.PID,t2.*,1 AccessCount 
from Table1 t1 inner join Table2 t2 on t1.id=t2.id 

这里,AccessCount列的数据类型由SQL服务器视为“int”默认情况下。

但是,当我在该列上应用求和运算符时,它说的是求和运算符不能应用于位类型的操作数1,并且这在所有服务器系统上都不可重现。

服务器系统配置对查询执行有影响吗?

+1

服务器配置与清除查询错误消息有什么关系?此外,没有“默认”类型。如果错误显示类型是位,则类型是位。发布* actual *查询和表模式。这个看法根本没有帮助。如果行为不同于另一个服务器,则表示*表*不同 –

+2

该查询*作为给定*,可能*从不*产生所描述类型的错误,因为它不包含“SUM”。而'SELECT 1 AccessCount'将会总是产生一个'INT'类型的列,而不会'BIT',所以简单地将它包装在一个'SUM'中也不会做任何事情。发布导致您遇到麻烦的实际代码,以及您访问结果的方式。有了一个视图,总是先尝试调用'sp_refreshview'来确保元数据不会过期。 –

+0

Re“服务器系统配置对查询执行有任何影响吗?”:我不知道任何会影响此设置的设置。原因是在不同系统上的查询之间存在一些差异。 – Alex

回答

2

运行下面提到的查询来解决您的问题。

SELECT SUM(CONVERT(INT, AccessCount)) FROM Table1 

该查询将首先将该值转换为int,然后SUM将该列的所有值。

3
U can use these three methods 
    DECLARE @TEST TABLE (GROUP_ID INTEGER, STATUS BIT) 
    INSERT INTO @TEST 
    SELECT 1, 1 UNION ALL SELECT 1, 0 UNION ALL 
    SELECT 2, 1 UNION ALL SELECT 2, 1 



    SELECT 
      SUM(CAST(STATUS AS INT)) AS '1ST METHOD', 
      SUM(CASE(STATUS) WHEN 1 THEN 1 ELSE 0 END) AS '2ND METHOD', 
      COUNT(NULLIF(STATUS,0)) AS '3RD METHOD' 
    FROM 
      @TEST 
+0

可以使用这些问号 – Chanukya