可以在SQL Server中添加两个或更多位类型变量吗?
这是我的桌子
(此处0-缺席1-出席,dpa-每次出席)
masterid studentid date sub1 sub2 sub3 sub4 dpa
08mcaa1 08mca01 12/1/2011 o 1 1 1基于sub1,sub2,sub3,sub4添加,并将其选中
总的sum=4,然后是dpa=1,
否则今天的dpa=half就会出现,
否则,如果sum=0 =0,则dpa =0
这是我的问题,.please任何人都可以帮助我。
发布于 2011-03-19 16:25:44
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+是使它们可计数或可用数学运算。
发布于 2011-03-19 16:30:20
您不能在SQL Server中添加位,但可以向数字添加位,这将返回一个数字,因为在SQL Server中,“位”只是一个有效值为0,1的整数类型。
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“实现为数据类型,而整数类型是微不足道的):
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 tablehttps://stackoverflow.com/questions/5360961
复制相似问题