您不能在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