Как использовать переменную BIT для функции манипулирования данными с использованием SQL Server? - PullRequest
0 голосов
/ 19 марта 2011

Может ли быть возможность добавить две или более переменные битового типа в SQL Server?

это моя таблица

(здесь 0-отсутствует 1-присутствует, dpa-day на посещаемость)

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

это моя проблема. Пожалуйста, помогите мне.

Ответы [ 2 ]

1 голос
/ 19 марта 2011

Нельзя добавлять биты в 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-сервера (предполагается, что 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
1 голос
/ 19 марта 2011
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+ состоит в том, чтобы сделать их исчисляемыми или работающими с математическими вычислениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...