두 개의 필드가있는 테이블이 있습니다. ID 필드 (FID
)는 기본 키이고 Qty
은 모두 정수입니다. 나는이 테이블을 쿼리하고 그래서 나는이 같은 결과를 얻을 수있는 수량 필드를 사용하여 시퀀스 직렬로 두 개의 추가 필드를 추가해야합니다시퀀스 레코드 번호 추가
table1
-------------------------------------
ID Qty range_begin range_end
50 2 1 2
53 1 3 3
65 3 4 6
67 2 7 8
range_begin
필드 시작 1에서 다음 레코드는 range_end + 1
해야한다. 그리고 range_end = last range_end + Qty
난 내가 쿼리 시작보다 먼저
rdb$set_context('USER_TRANSACTION', 'range_end', null);
rdb$set_context('USER_TRANSACTION', 'range_begin', null);
를 null로 모든 변수를 설정이
처럼 컨텍스트 변수를 사용하여 작성했습니다 :
Select
rdb$get_context('USER_TRANSACTION', 'range_begin'),
rdb$set_context('USER_TRANSACTION', 'range_begin', COALESCE(CAST(rdb$get_context('USER_TRANSACTION', 'range_end') AS INTEGER), 0) + 1)),
rdb$get_context('USER_TRANSACTION', 'range_end'),
rdb$set_context('USER_TRANSACTION', 'range_end', COALESCE(CAST(rdb$get_context('USER_TRANSACTION', 'range_end') AS INTEGER), 0) + Qty)),
Qty
from table1 where ...
을하지만 올바른 순서를 얻을 수 없었습니다. 나는 또한 더 많은 변수와 다른 것들을 추가하려고했지만 아무도 나를 위해 일한 그래서 어떻게해야합니까 단일 선택 쿼리를 사용할 수 있습니까?
저는 FireBird 2.5를 사용하고 있으며 답변에 컨텍스트 변수를 사용할 필요가 없습니다.
이 테이블에는 1M 개가 넘는 레코드가 있지만이 쿼리에는 'where' 절이 100 레코드 만 반환하므로 사용자의 솔루션을 사용할 것입니다. 감사. – Wel
'ID' 필드가 반복되는지 묻고 싶습니다. 'range_begin'이 1에서 시작하지 않는다는 것을 알았습니까? – Wel
음, 내 머리 꼭대기가 아니라 ... 'ID'대신 사용할 수있는 테이블에 PK가 없습니까? – ain