У меня есть таблица с двумя полями: поле ID (FID
) в качестве первичного ключа и Qty
оба являются целыми числами. Мне нужно запросить эту таблицу и добавить два дополнительных поля в последовательности сериала, используя поле 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);
чем я начинаю запрос:
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 ...
Но я не удалось получить правильную последовательность. Я также пытался добавить больше переменных и других вещей, но никто не работал для меня, так как это должно быть сделано, чтобы я мог использовать один запрос select?
Я использую FireBird 2.5, и нет необходимости использовать контекстные переменные.
Эта таблица имеет более 1 М записей, но в этом запросе предложение 'where' возвращает только 100 записей, поэтому я собираюсь использовать ваше решение. Благодарю. – Wel
Я хочу спросить, если поле 'ID' повторяется, я нахожу, что' range_begin' не начинается с 1, так ли это обходное решение? – Wel
Хм, а не от головы, прямо сейчас ... разве у вас нет ПК в таблице, которую вы могли бы использовать вместо «ID»? – ain