|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
09.04.2014, 11:05 | #1 |
Форумчанин
Регистрация: 05.07.2009
Сообщений: 209
|
Как собрать данные с начала года. Помогите определить направление, куда копать.
Здравствуйте! Помогите, пожалуйста, выбрать способ решения задачи (цикл, курсор, или что-то еще). Мне нужно сделать хранимую процедуру, или представление (если это возможно), которая выбирает данные из трех таблиц с начала года до текущего месяца. Информация - это мероприятия по снижению себестоимости. Каждое мероприятие имеет месяц внедрения и дату окончания. В чем сложность: данные за один месяц также представляют из себя выборку информации из трех таблиц с начала года и до этого месяца. Т.е. если мне нужна инфа за март, я должна взять январь+февраль+март. Поскольку мероприятия, внесенные даже в начале года, будут действовать в течение всего года, пока не будут отменены. Таким образом, чтобы мне выбрать информацию с начала года и по март месяц, мне нужно взять:
январь (мероприятия, которые начали действовать с января) январь+февраль январь+февраль+март И все это объединить. каким образом можно организовать объединение подобных выборок? В какую сторону смотреть: цикл, курсор или что еще? Нужна ваша помощь!!!! |
09.04.2014, 11:13 | #2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
честно говоря, не понял, чем Вас не устраивает обычный SQL SELECT
Код:
|
09.04.2014, 11:17 | #3 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Все делается запросом. Куда его - в процедуру или представление это уже конкретная реализация. Курсоры и циклы крайне не эффективны. Для запроса нужны структуры таблиц, связи, если есть, и что и из какой выбирается. Показывайте. И какая СУБД
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
09.04.2014, 11:18 | #4 |
Форумчанин
Регистрация: 05.07.2009
Сообщений: 209
|
Таким образом я возьму данные только за 1 месяц. Т.е.
март=январь+февраль+март а чтобы взять еще и февраль и январь, нужно данные за январь объединить с данными за февраль=январь+февраль объединить с данными за март=январь+февраль+март Т.е. в итоговое таблице у меня данные за январь должны попасть в расчет 3 раза, за февраль 2 раза. Последний раз редактировалось Swatch; 09.04.2014 в 11:25. |
09.04.2014, 11:22 | #5 |
Форумчанин
Регистрация: 05.07.2009
Сообщений: 209
|
СУБД Access, Данные на SQL Server 2000.
Исходные данные: Мероприятия по снижению себестоимости на детали Мероприятия по снижению себестоимости на автобусы Мероприятия по снижению себестоимости на кузова Всего 3 таблицы. Структура у них одинаковая: Обозначение детали/автобуса/кузова, Название мероприятия, Месяц внедрения мероприятия, Дата окончания мероприятия, Расходы было, Расходы стало. Последний раз редактировалось Swatch; 09.04.2014 в 11:30. |
09.04.2014, 11:27 | #6 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
если Вы укажите в select'е получить данные за все месяцы с 1 по 3 (условие month(ДАтаСобытия)<4) вы получите данные за 1(один) месяц, за март??!!!!
А как же у Вас данные в таблице хранятся, что у Вас так запрос отрабатывает?! |
09.04.2014, 11:37 | #7 |
Форумчанин
Регистрация: 05.07.2009
Сообщений: 209
|
Еще раз попробую объяснить суть. Допустим мероприятие начинает действовать с января (Месяц внедрения -=1). НО оно будет действовать в течение ВСЕГО года, т.е. и в феврале, и в марте, и далее, пока не закончится год или его не закроют (Дата окончания перестанет быть Null). То есть экономию от этого мероприятия мне нужно брать именно так, как я написала.
Если я возьму данные так, как вы предлагаете, я возьму их только за март, все правильно. Потому что экономия от мероприятия, внедренного в январе, возьмется только ОДИН РАЗ, а должна взяться ТРИ РАЗА, в трех месяцах. Если это мероприятие не будет закрыто до конца года, то оно должно браться в расчет в КАЖДОМ месяце года, то есть в каждом последующем месяце экономия от внедренных мероприятий будет увеличиваться (все предыдущие+все, начавшие действовать в этом месяце). |
09.04.2014, 11:40 | #8 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Странный подход. И не думаю, что правильный. Вам виднее. Так устроит:
Код:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 09.04.2014 в 11:43. |
09.04.2014, 11:42 | #9 |
Форумчанин
Регистрация: 05.07.2009
Сообщений: 209
|
Аватар, спасибо, по смыслу именно так и нужно, только нужно бы, чтобы это количество UNION-ов соответствовало текущему месяцу. Я поэтому испрашивала про цикл, здесь смысл примерно тот же, если у меня будет текущий месяц сентябрь, например, то объединений будет больше.
|
09.04.2014, 11:45 | #10 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
В принципе в хранимке можно динамический запрос сделать и выполнить с помощью EXEC. Чесно - не нравится, или со структурой данных проблемы, или с логикой что-то не то
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Защита от виртуалки, куда копать? | FleXik | Общие вопросы Delphi | 4 | 15.10.2013 12:15 |
нахождение высокосного года, сезона года и к-ва дне с начала года Делфи 7 (есть код программы полностью) | программирование | Помощь студентам | 22 | 22.09.2013 23:59 |
Какой по счёту день от начала года(не работает скрипт) | maxim456 | JavaScript, Ajax | 3 | 22.03.2012 09:44 |
Куда копать: при открытии - ругается | alex77755 | Microsoft Office Excel | 6 | 07.10.2011 16:21 |
Internet TV: куда копать? | MyasNick | Мультимедиа в Delphi | 2 | 30.12.2008 18:42 |