Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
danton Member Откуда: Сообщений: 170 |
Итак, использую SQL 2008R2 Developer Edition Есть большая таблица для расчетов. ЕЕ код ниже: CREATE TABLE [mrp].[Consumption]( [ComponentID] [int] NOT NULL, [Consumption] [decimal](18, 0) NULL, [VersionTheWeek] [varchar](5) NOT NULL, [Kodeweek] [varchar](5) NULL, [Consumption_Total] [decimal](18, 0) NULL, [Balance] [decimal](18, 2) NULL, [MinBalance] [decimal](18, 2) NULL, [ConfDelivery] [decimal](18, 0) NULL, [ConfDelivery_Total] [decimal](18, 0) NULL, [PlanBalance] [decimal](18, 0) NULL, [PlanDelivery] [decimal](18, 0) NULL, [CountFiled] [decimal](18, 0) NULL, [PlanOrder] [decimal](18, 0) NULL, [PlanDelivery_Total] [decimal](18, 0) NULL ) ON [PRIMARY] GO Расчеты каждого поля сделаны, да и они не должны вас интересовать. Но на одном из этапов расчетов необходим пересчет в цикле. Алгоритм такой: ... SET [PlanBalance] = [StockNumber] - [PlanDelivery] While обход всех [ComponentID] While обход всех [Kodeweek] 1. Находим все [PlanBalance] < 0 2. SET [CountFiled] = ... 3. SET [PlanOrder] = ... 4. SET [PlanDelivery] = [PlanOrder] 5. SET [PlanBalance] = [StockNumber] - [PlanDelivery] END END ... Тоесть суть цикла: для кажого [ComponentID] И недели [Kodeweek] пересчитывать [PlanDelivery] И в соответсвии с ним [PlanBalance]. И переходя на новый шаг использовать [PlanBalance] из предидущего. Вопрос, можно ли в данной ситуации обойтись без циклов? |
20 сен 12, 16:49 [13197477] Ответить | Цитировать Сообщить модератору |
WarAnt Member Откуда: Питер Сообщений: 2423 |
danton, нифига не понял и вашего объяснения чего надо сделать, используйте faq для создания первого поста. |
20 сен 12, 17:00 [13197542] Ответить | Цитировать Сообщить модератору |
WarAnt Member Откуда: Питер Сообщений: 2423 |
danton, если речь о нарастающем итоге то поиск поможет, обсуждалось много раз. |
20 сен 12, 17:01 [13197552] Ответить | Цитировать Сообщить модератору |
danton Member Откуда: Сообщений: 170 |
Нарастающие итоги используются в расчетах, но в моей задаче не думаю, что они помогут. Нарастающий итог просчитывается один раз. Это фиксированные данные для одного поля. А у меня в одной итерации пересчитываются несколько полей, связанные формулами. |
||
20 сен 12, 17:10 [13197602] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
нарастающий итог - это метод передачи каких то вычислений от записи к записи |
||
20 сен 12, 17:13 [13197619] Ответить | Цитировать Сообщить модератору |
danton Member Откуда: Сообщений: 170 |
Для одного поля? |
||
20 сен 12, 17:14 [13197632] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Для скольки сделаете, для стольки и будет |
||||
20 сен 12, 17:15 [13197641] Ответить | Цитировать Сообщить модератору |
danton Member Откуда: Сообщений: 170 |
К моей задаче нарастающие итоги применимы? |
||
20 сен 12, 17:26 [13197730] Ответить | Цитировать Сообщить модератору |
danton Member Откуда: Сообщений: 170 |
danton, Цикл нужен был как раз для того, чтобы в нем пересчитывались нарастающие итоги. |
20 сен 12, 17:31 [13197760] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Откуда это известно Вы же рассказали не про задачу, а про выбранный вами способ ее решения. |
||||
20 сен 12, 17:32 [13197771] Ответить | Цитировать Сообщить модератору |
danton Member Откуда: Сообщений: 170 |
Задача: Расчитать планируемый заказ. Вход: на текущую неделю - потребность на N недель вперед, остаток на складе на текущую неделю, подтвержденные поставки на текущую неделю. Необходимо просчитать Остаток = Остаток на складе - Потребность + Подтверженная поставка. Это реальный остаток. Просчитываем так же поле Планируемый остаток = Остаток, далее бьудет пояснено зачем. Как только остаток становится отрицательным, необходимо сделать заказ. Вводим 2 понятия Планируемый заказ и планируемая доставка, он равны ежду собой, отличаются только неделями. Соответсвенно если на какой то недели у нас планиуется доставка, то это необходимо учесть в остатке, потому и водили понятие плариуемого остатка, который равен: Планируемый остаток = Остаток + Планируемая доставка. И уже с помощью него работать для последующих недель. Такой пересчет мы деалем для всех N недель и N товаров. |
||||
20 сен 12, 17:49 [13197912] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
Что-то мне кажется это в форум работа надо перенести. Что мы подорвались читать заказ в клиентском стиле и разжёвывать что к чему. Или чёткие скрипты таблиц и данных и примеры запросов (согласно требованиям форума) с вопросами что конкретно не получается в SQL (а не как решить задачу) или перенос топика. |
20 сен 12, 19:12 [13198276] Ответить | Цитировать Сообщить модератору |
danton Member Откуда: Сообщений: 170 |
Уважаемый, Mnior! Не прошу решать задачу, даже в мыслях не было. Меня попросили ее описать, я с горяча накидал описание. Сейчас сделаю все по правилам. |
||
21 сен 12, 11:54 [13200828] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |