문제

비트 개념에 4 개의 25 개의 열이있는 테이블이 있습니다. 실제로 필드는 smallint이지만 데이터에서 0 또는 1입니다.

다음은 25 개 Cols의 첫 번째 그룹에 대한 총계를 얻으려고 시도한 내 코드입니다.

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

티아

도움이 되었습니까?

해결책

나는 Tomalak이 그것을 가지고 있다고 생각한다. 그래서 내가 그를 수정했는지, 그러나 당신이 이것을 더 또는 한 번한다면, 그 모든 엉망이기 때문에 :

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

지루하고 오류가 발생하기 쉽습니다. 한 번도 그 견해와 테스트로 철저히 테스트하지 않겠습니까?

그럼 그냥 select total from viewname where reckey = ?.

다른 팁

왜 그렇게 복잡합니까?

SELECT
  RecKey,
  cbHPILoc1
  + cbHPILoc2 * 2
  + cbHPILoc3 * 4
  + ...
  + cbHPILoc25 * 16777216
  AS Total
FROM
  dbo.MyTest_BitMap
WHERE 
  RecKey = @ID
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top