TSQL. Получить побитовую сумму для многих столбцов подряд - PullRequest
0 голосов
/ 01 мая 2009

У меня есть таблица с четырьмя наборами по 25 столбцов в концепции BIT. На самом деле поле smallint, но в его данных либо 0, либо 1.

Вот мой код, который является попыткой получить сумму для первой группы в 25 столбцов.

Declare @rows int
, @ID uniqueidentifier
, @LocTotal bigint


select @rows =  ( select  count(*) from #t1 )

while @rows > 0
begin
print @rows
-- get that rowID
       select @ID = (select top 1 recid from #t1)
select @LocTotal =
(select top 1
case when cbHPILoc1 = 1 then 1 else 0 end +
case when cbHPILoc2 =  1 then 2 else 0 end +
case when cbHPILoc3 = 1 then  4 else 0 end +
< snip >
case when cbHPILoc25 = 1 then 16777216 else 0 end
as Total
 from  dbo.MyTest_BitMap
where RecKey = @ID
)
       print @ID
print  @LocTotal

Мой вывод:

(5 row(s) affected)
5
67A16306-B27D-4882-88A2-1146CBAAA8D9

(1 row(s) affected)
4
F94929B9-3DA7-4AA3-96F6-728EF025B21C

Я не могу получить сумму до @LocTotal

1012 * ТИА *

Ответы [ 2 ]

3 голосов
/ 01 мая 2009

Почему так сложно?

SELECT
  RecKey,
  cbHPILoc1
  + cbHPILoc2 * 2
  + cbHPILoc3 * 4
  + ...
  + cbHPILoc25 * 16777216
  AS Total
FROM
  dbo.MyTest_BitMap
WHERE 
  RecKey = @ID
0 голосов
/ 01 мая 2009

Я думаю, что у Томалака это есть, поэтому я модифицировал его, но если вы сделаете это несколько раз, после всего этого беспорядка:

cbHPILoc1
  + cbHPILoc2 * 2
  + cbHPILoc3 * 4
  + ...
  + cbHPILoc25 * 16777216

утомительно и подвержено ошибкам, почему бы не сделать это один раз в качестве просмотра и тщательно протестировать его?

Тогда просто select total from viewname where reckey = ?.

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