用于评估哪些行不为空并返回INT的函数

时间:2013-04-25 17:24:57

标签: sql-server binary int

我正在尝试为SQL Server中检查的行计算数值。我之前在客户端使用.NET代码完成了这项工作。我正在尝试在SQL Server脚本中执行此操作,因为基于用户向我发送了一个类似于输入表的excel电子表格。

星期几示例

Sun = 1
Mon = 2
Tue = 4
Wed = 8
Thr = 16
Fri = 32
Sat = 64

输入表

SYSID SUN MON TUE WED THR FRI SAT
----- --- --- --- --- --- --- ---
  1    0   0   1   0   1   0   0
  2    1   1   1   1   1   1   1
  3    0   0   0   1   0   0   1

期望的结果

SYSID DayOfWeek
----- ---------
  1      20
  2      127
  3      68

没有编写128个Case语句或者将值写入另一个表并执行SUM函数...我正在考虑一个函数,我传入7个字段的值并将它们一起添加并返回值。

有更简单的方法吗?

1 个答案:

答案 0 :(得分:1)

如果我理解你想要做什么,这样的事情可能有用:

SELECT (CASE WHEN SUN=1 THEN 1  ELSE 0 END)
    +  (CASE WHEN MON=1 THEN 2  ELSE 0 END)
    +  (CASE WHEN TUE=1 THEN 4  ELSE 0 END)
    +  (CASE WHEN WED=1 THEN 8  ELSE 0 END)
    +  (CASE WHEN THU=1 THEN 16 ELSE 0 END)
    +  (CASE WHEN FRI=1 THEN 32 ELSE 0 END)
    +  (CASE WHEN SAT=1 THEN 64 ELSE 0 END)
    AS DayOfWeek
FROM InputTable