2011-03-19 63 views
0

能夠在SQL Server中添加兩個或多個位類型變量嗎?如何將BIT變量用於使用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加入,它會檢查

的總和= 4,那麼dpa = 1,

否則dpa =一半的一天存在,

否則,如果總和= 0,那麼dpa = 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

您不能在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是布爾類型,因爲不是所有的數據庫引擎都實現「位」作爲數據類型,並且整數類型是微不足道的):

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 
相關問題