Sql server 我如何计算一个位列的和?
有一种看法如下:Sql server 我如何计算一个位列的和?,sql-server,tsql,Sql Server,Tsql,有一种看法如下: select t1.PID,t2.*,1 AccessCount from Table1 t1 inner join Table2 t2 on t1.id=t2.id 在这里,AccessCount列的数据类型在默认情况下被SQL server视为“int” 但当我在该列上应用求和运算符时,它表示不能在操作数1的位类型上应用求和运算符,并且这在所有服务器系统上都是不可复制的 服务器系统配置对查询执行是否有任何影响?运行下面提到的查询以解决问题 SELECT SUM(CONV
select t1.PID,t2.*,1 AccessCount
from Table1 t1 inner join Table2 t2 on t1.id=t2.id
在这里,AccessCount
列的数据类型在默认情况下被SQL server视为“int
”
但当我在该列上应用求和运算符时,它表示不能在操作数1的位类型上应用求和运算符,并且这在所有服务器系统上都是不可复制的
服务器系统配置对查询执行是否有任何影响?运行下面提到的查询以解决问题
SELECT SUM(CONVERT(INT, AccessCount)) FROM Table1
此查询将首先将值转换为int,然后对列的所有值求和。运行下面提到的查询以解决您的问题
SELECT SUM(CONVERT(INT, AccessCount)) FROM Table1
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
此查询将首先将值转换为int,然后对列的所有值求和。服务器配置与清除查询错误消息有什么关系?此外,没有“默认”类型。如果错误显示类型为位,则类型为位。发布实际的查询和表架构。这一观点毫无帮助。如果不同服务器之间的行为不同,则意味着表是不同的。给定的查询永远不会产生您描述的错误,因为它不包含
SUM
。而且select1accesscount
将始终生成类型为INT
的列,而不会生成位
,因此简单地将其包装在和中也不会产生任何效果。张贴给您带来麻烦的实际代码,以及您访问结果的方式。对于视图,请始终首先尝试调用sp_refreshview
,以确保元数据未过期。Re“服务器系统配置是否对查询执行有任何影响?”:我不知道有任何设置/会影响此设置。原因是您在不同系统上的查询存在差异。服务器配置与清除查询错误消息有什么关系?此外,没有“默认”类型。如果错误显示类型为位,则类型为位。发布实际的查询和表架构。这一观点毫无帮助。如果不同服务器之间的行为不同,则意味着表是不同的。给定的查询永远不会产生您描述的错误,因为它不包含SUM
。而且select1accesscount
将始终生成类型为INT
的列,而不会生成位
,因此简单地将其包装在和中也不会产生任何效果。张贴给您带来麻烦的实际代码,以及您访问结果的方式。对于视图,请始终首先尝试调用sp_refreshview
,以确保元数据未过期。Re“服务器系统配置是否对查询执行有任何影响?”:我不知道有任何设置/会影响此设置。原因是您在不同系统上的查询存在差异。您可以使用这些查询吗
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