首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SQL Server中使用位变量实现数据操作函数?

如何在SQL Server中使用位变量实现数据操作函数?
EN

Stack Overflow用户
提问于 2011-03-19 16:17:30
回答 2查看 1.2K关注 0票数 0

可以在SQL Server中添加两个或更多位类型变量吗?

这是我的桌子

(此处0-缺席1-出席,dpa-每次出席)

代码语言:javascript
复制
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任何人都可以帮助我。

EN

回答 2

Stack Overflow用户

发布于 2011-03-19 16:25:44

代码语言:javascript
复制
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

那只是一种奇特的写作方式。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2011-03-19 16:30:20

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

代码语言:javascript
复制
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的替代方法是显式地将位转换为整数:

代码语言:javascript
复制
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“实现为数据类型,而整数类型是微不足道的):

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5360961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档