能否在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
这是我的问题。请任何人帮助我。
答案 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