如何使用SQL Server使用BIT变量进行数据操作?

时间:2011-03-19 08:17:30

标签: sql-server sql-server-2005

能否在SQL Server中添加两个或更多位类型变量?

这是我的表

(此处0-缺席1-present,dpa-day per attendance)

masterid studentid    date     sub1 sub2 sub3 sub4  dpa
08mcaa1  08mca01  12/1/2011     o     1   1    1
添加了基于sub1,sub2,sub3,sub4

并将对其进行检查

总和= 4然后dpa = 1,

其他dpa =一天中有一半存在,

否则如果sum = 0则dpa = 0

这是我的问题。请任何人帮助我。

2 个答案:

答案 0 :(得分:1)

update tbl
set dpa = case (select count(*) from (
           select sub1 union all
           select sub2 union all
           select sub3 union all
           select sub4) x
           where sub1 = 1)
          when 4 then 1
          when 0 then 0
          else 0.5 end

这只是一种写作的奇特方式

update tbl
set dpa = case 1.0+sub1+sub2+sub3+sub4
          when 4 then 1
          when 0 then 0
          else 0.5 end

你不能添加比特,所以COUNT()技巧或1.0+是使它们可数或可用于数学。

答案 1 :(得分:1)

您无法在SQL Server中添加位,但您可以向数字添加一位并返回一个数字,因为在SQL Server中,“位”只是一个有效值为0的整数类型。

SELECT CASE ((((0+sub1)+sub2)+sub3)+sub4) WHEN 4 THEN 1 ELSE ((((0+sub1)+sub2)+sub3)+sub4)/2 END as dpa
FROM table

另一种特定于SQL Server的方法是将该位显式地转换为整数:

SELECT CASE CAST(int,sub1)+CAST(int,sub2)+CAST(int,sub3)+CAST(int,sub4)
    WHEN 4 THEN 1 ELSE (CAST(int,sub1)+CAST(int,sub2)+CAST(int,sub3)+CAST(int,sub4))/2 END AS dpa
FROM table

更基于标准,不是特定于SQL Server的(假设sub1 / 2/3/4是布尔类型,因为并非所有数据库引擎都将“bit”实现为数据类型,并且整数类型很简单):< / p>

SELECT CASE
  (CASE WHEN sub1 THEN 1 ELSE 0 END)+(CASE WHEN sub2 THEN 1 ELSE 0 END)+(CASE WHEN sub3 THEN 1 ELSE 0 END)+(CASE WHEN sub4 THEN 1 ELSE 0 END)
WHEN 4 THEN 1 ELSE
  ((CASE WHEN sub1 THEN 1 ELSE 0 END)+(CASE WHEN sub2 THEN 1 ELSE 0 END)+(CASE WHEN sub3 THEN 1 ELSE 0 END)+(CASE WHEN sub4 THEN 1 ELSE 0 END))/2
END AS dpa
FROM table