Как одну строчку в таблице разбить на несколько?

novss
Дата: 08.03.2008 15:08:49
Есть таблица со след. полями и данными (таблица каждый раз генерируется с новыми данными)

Артикул; Имя; Кол-во кг; Кол-во паллет
1; Продукт А; 100; 2
2; Продукт В; 700; 4
............................

необходимо получить новую таблицу


Артикул; Имя; Кол-во кг; Кол-во паллет
1; Продукт А; 50; 1
1; Продукт А; 50; 1
2; Продукт В; 175; 1
2; Продукт В; 175; 1
2; Продукт В; 175; 1
2; Продукт В; 175; 1
mds_world
Дата: 08.03.2008 15:37:52
Решение, когда-то предложенное но этом форуме, по-моему Вигом

Создается табличка с одним полем счетчик, пусть она называется nrec, где количество записей не меньше максимального требуемого количества строчек, т.е. в вашем случае число записей в доп.таблице не меньше максимального из поля [Кол-во паллет]. Дальше так
select * into ДругаяТаблица
from 
  (select Артикул, Имя, [Кол-во кг], [Кол-во паллет]
  from  Таблица as t inner join nrec on nrec.n <=t.[Кол-во паллет])
novss
Дата: 10.03.2008 18:15:55
2 mds_world:
Дико извиняюсь, но честно говоря не совсем понял предложенное решение
Можно поподробнее, и поправьте где неправ.


Таблица - это изначальная таблица, где содержиться список данных с кол-вом паллет.
nrec - это таблица с единсвенным полем счетчик, и кол-вом записей не меньше чем максимальное кол-во паллет из Таблицы.
Другая таблица - это третья таблица, которая генерируется в результате выполнения запроса.

И значиться в Другая таблица добавляем данные из Таблица и
вот совсем непонятна последняя строчка, особенно, поле по которому связываются таблицы и это выражение
nrec.n <=t.[Кол-во паллет])

Прокомментируйте пожалуйста

Best Regards
mds_world
Дата: 10.03.2008 18:50:06
novss,
попробовать вы так и не решились?

В принципе, вы все правильно поняли, я имею в виду названия таблиц.

nrec.n <=t.[Кол-во паллет] создает связь между исходной таблице и вспомогательной по всему множеству значений nrec.n, удовлетворяющих условию. Именно это и позволяет выводить несколько записей вместо одной исходной.

Я допустил ошибку в запросе, просмотрел, что кол-во кг делится на кол-во палетт. С учетом этого переписываем:
select * into ДругаяТаблица
from 
  (select Артикул, Имя, [Кол-во кг]/ [Кол-во паллет] as [Кол-во кг.], 1 as [Кол-во паллет.]
  from  Таблица as t inner join nrec on nrec.n <=t.[Кол-во паллет])
К сожалению, для избежания циклической ссылки приходится немного менять имена полей. В частности я добавил точки в названия рассчетных полей. Если важны исходные названия полей, то селект придется завернуть еще в один, в котором уже можно будет восстановить нужные названия.
SNV
Дата: 10.03.2008 19:41:00
Спасибо, теперь врубился.

Буду думать.
я ошибся в условии постановки задачи -данный вариант решается проблему если кол-во паллет целое. В жизни бывает ситуация когда приходит кол-во кг, которое равно не целому кол-ву паллет.