Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.07.2013, 22:45   #1
smoky
Пользователь Подтвердите свой е-майл
 
Регистрация: 13.05.2008
Сообщений: 65
По умолчанию Отчет за год по месяцам с переходом на следующий месяц

Имеем:
Таблица с who, date_start, day_plus
Делаю перекрестный запрос, выводится что то типа такого:
Код:
who	day_start	day_plus	1	2	3	4	5	6	7	8	9	...	30	31
1	09.10.2005	25
3	02.03.2008	33			19
1	30.12.2012	99												99
Возможно ли сделать так, чтобы вывелся запрос такого плана:
Код:
who	day_start	day_plus	1	2	3	4	5	6	7	8	9	...	30	31
1	09.10.2005	25										*		*	*
1	09.10.2005	25		*	*	*
3	02.03.2008	33		*	*	*	*	*	*	*	*	*		*	*
3	02.03.2008	33		*	*	*	*
1	30.12.2012	99												*	*
1	30.12.2012	99		*	*	*	*	*	*	*	*	*		*	*
...
Этот запрос уже потом хотел вставить в отчет и получать за выбранный год - месяц и все что к этому месяцу относится. Т.е. в отчете будет только январь...декабрь. С отчетом все понятно, а вот как быть с запросом для отчета...
Вобщем, хочется сделать визуальное отображение занятых дней с некоего начального дня. С минимальным набором записей. Фактически можно все и руками занести в таблицу по каждому дню и спокойно выводить. Скрипт делящий дату начала события при превышении первого числа следующего месяца на две части и последующим заполнением дат я думаю будет не сложно сделать... Но вдруг можно обойтись и минимальным количеством начальных данных? Тем более что в последствии в таблице хочется сделать поле day_plus_correct - там будет ставиться некая корректирующая цифра, и вот тут уже в существующие данные (при делении и заполнении большой таблицы) - будет довольно проблематично...
Если есть у кого какие мысли по решению такой задачки - буду рад послушать и поучиться
smoky вне форума Ответить с цитированием
Старый 11.07.2013, 00:16   #2
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,079
По умолчанию

а если в месяц 2 события
с 5 ===7 дней
с 25-----4
сколько строк будет в отчете

а если перекрест периодов
с 25 декабря --100 дней --4 строки
с 2 января-12 дней
с 10---10дней
с 25 марта-34 дней
---------
или все строки независимы
4 стр-1-1-2
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Старый 11.07.2013, 00:54   #3
smoky
Пользователь Подтвердите свой е-майл
 
Регистрация: 13.05.2008
Сообщений: 65
По умолчанию

сейчас вот такой запрос выводит то что указано выше:
Код:
TRANSFORM Sum(tbl.day_plus) AS [Sum-day_plus]
SELECT tbl.who, tbl.date_start
FROM tbl
GROUP BY tbl.who, tbl.date_start
PIVOT Day([date_start]) In (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31);
shanemac51, немного не понял вопрос но тем не менее постараюсь ответить:
1. не важно сколько событий в конкретный месяц, важно то что если [date_start]+[day_plus] в сумме дадут большую дату чем datepart(Year([date_start], month([date_start]), 1) то такую строку надо как то делить на две составляющие. т.е. если я правильно понял:
1 с 5 числа плюс 7 дней
3 с 25 числа плюс 4 дня
в итоге (если не високосный февраль) мы получим 3 строки:
1 05.02.13 ----+++++++-----------------
3 25.02.13 -------------------------+++
3 25.02.13 +--------------------------

2. Перекрестов периодов не должно быть (они не допустимы). т.е. такого:
1 с 25.12.12 на 100 дней
1 с 02.01.13 на 12 дней
1 с 10.01.13 на 10 дней
...
в таблице не будет.
Единственное, что планируется - это добавление поля day_correct. И пока оно будет просто прибавляться к [date_start]+[day_plus]. Я так понимаю что перекрестные периоды создадут некие трудности для вывода? вообще они да, существуют. но пока я эти периоды решил оставить в виде day_correct (как обычное корректирующее цифровое значение).
Да, если это важно - who (текст), date_start (короткая дата), day_plus (длинное целое)

upd. вот таблица, вот результат запроса

Последний раз редактировалось smoky; 11.07.2013 в 00:58.
smoky вне форума Ответить с цитированием
Старый 11.07.2013, 03:13   #4
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,079
По умолчанию

БЕЗ ПЕРЕКРЕСТНОГО ЗАПРОСА)прямо в отчете)
Вложения
Тип файла: zip Cyra0711.zip (42.1 Кб, 19 просмотров)
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Старый 12.07.2013, 00:43   #5
smoky
Пользователь Подтвердите свой е-майл
 
Регистрация: 13.05.2008
Сообщений: 65
По умолчанию

решение оригинальное ) помучился я с его разбором ))
а реально так сделать чтобы оно по месяцам дробилось? просто то что выше - это применительно к запросу писал...
т.е. вывести примерно вот в таком виде:
Код:
май
who	day_start	day_plus	1	2	3	4	5	6	7	8	9	...	30	31
1	09.05.2005	25										*		*	*
3	02.05.2005	33		*	*	*	*	*	*	*	*	*		*	*
июнь
1	09.06.2005	25		*	*	*
3	02.05.2005	33		*	*	*	*
декабрь
1	30.12.2012	99												*	*
1	30.12.2012	99		*	*	*	*	*	*	*	*	*		*	*
smoky вне форума Ответить с цитированием
Старый 12.07.2013, 08:44   #6
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,079
По умолчанию

более стандартное решение со вспомогательной таблицей дат
Вложения
Тип файла: zip Cyra0712.zip (66.3 Кб, 16 просмотров)
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
месяц год в datedimepicker kate158 Компоненты Delphi 1 22.10.2012 10:38
Расчет дежурств на следующий месяц по табелю текущего месяца zenner Microsoft Office Excel 9 20.11.2010 17:01
Дан файл, содержащий различные даты. Каждая дата – это число, месяц и год. Найти год с наименьшим номе Figushkin Помощь студентам 2 04.06.2010 23:16
Как перейти на следующий год обучения lenuxoid БД в Delphi 1 11.05.2009 22:20
Месяц, год megavolt Microsoft Office Access 0 06.04.2009 16:22