скопировать запись с количеством x в x экземпляров в другой таблице с количеством = 1 - PullRequest
0 голосов
/ 27 февраля 2020

Мои SQL навыки вполне достаточны для большинства того, что мне нужно, но это за пределами моих знаний. Я попытался написать процедуру в Object Pascal, генерирующую SQL, которая работает, но она довольно медленная.

У меня есть таблица, содержащая записи с суммами = или> 1. Теперь я хочу скопировать эти записи в другую таблицу «количество» раз, так что запись, имеющая сумму 1, копируется один раз с количеством 1, а запись с количеством 5 копируется 5 раз, каждая с новым количеством 1.

Возможно ли это сделать в SQL?

1 Ответ

1 голос
/ 27 февраля 2020

Предполагая две таблицы source и target:

create table source (
  id integer generated by default as identity constraint pk_source primary key,
  item_type integer not null,
  amount integer not null
);

create table target (
  id integer generated by default as identity constraint pk_target primary key,
  item_type integer not null,
  amount integer not null
);

Где source заполняется как:

insert into source (item_type, amount) values (1, 5);
insert into source (item_type, amount) values (2, 1);
insert into source (item_type, amount) values (3, 2);

Затем вы можете скопировать эти записи в target с анонимной процедурой (execute block):

execute block
as
declare item_type type of column source.item_type;
declare amount type of column source.amount;
begin
  for select item_type, amount from source into item_type, amount do
  begin
      while (amount > 0) do
      begin
        insert into target (item_type, amount) values (:item_type, 1);
        amount = amount - 1;
      end
  end
end

Копирует запись из source в target (amount) раз.

Смотрите также это dbfiddle .

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