ВЫБРАТЬ
НАЧАЛОПЕРИОДА(ЗаказыКлиентов.Период, ДЕНЬ) КАК Период
ПОМЕСТИТЬ ВТДаты
ИЗ
РегистрНакопления.ЗаказыКлиентов КАК ЗаказыКлиентов
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТДаты.Период КАК Период,
ВЫБОР
КОГДА ГОД(ВТДаты.Период) = 2000 ТОГДА "2000"
КОГДА ГОД(ВТДаты.Период) = 2001 ТОГДА "2001"
КОГДА ГОД(ВТДаты.Период) = 2002 ТОГДА "2002"
КОГДА ГОД(ВТДаты.Период) = 2003 ТОГДА "2003"
КОГДА ГОД(ВТДаты.Период) = 2004 ТОГДА "2004"
КОГДА ГОД(ВТДаты.Период) = 2005 ТОГДА "2005"
КОГДА ГОД(ВТДаты.Период) = 2006 ТОГДА "2006"
КОГДА ГОД(ВТДаты.Период) = 2007 ТОГДА "2007"
КОГДА ГОД(ВТДаты.Период) = 2008 ТОГДА "2008"
КОГДА ГОД(ВТДаты.Период) = 2009 ТОГДА "2009"
КОГДА ГОД(ВТДаты.Период) = 2010 ТОГДА "2010"
КОГДА ГОД(ВТДаты.Период) = 2011 ТОГДА "2011"
КОГДА ГОД(ВТДаты.Период) = 2012 ТОГДА "2012"
КОГДА ГОД(ВТДаты.Период) = 2013 ТОГДА "2013"
КОГДА ГОД(ВТДаты.Период) = 2014 ТОГДА "2014"
КОГДА ГОД(ВТДаты.Период) = 2015 ТОГДА "2015"
КОГДА ГОД(ВТДаты.Период) = 2016 ТОГДА "2016"
КОГДА ГОД(ВТДаты.Период) = 2017 ТОГДА "2017"
КОГДА ГОД(ВТДаты.Период) = 2018 ТОГДА "2018"
КОГДА ГОД(ВТДаты.Период) = 2019 ТОГДА "2019"
КОГДА ГОД(ВТДаты.Период) = 2020 ТОГДА "2020"
КОГДА ГОД(ВТДаты.Период) = 2021 ТОГДА "2021"
КОГДА ГОД(ВТДаты.Период) = 2022 ТОГДА "2022"
КОГДА ГОД(ВТДаты.Период) = 2023 ТОГДА "2023"
КОГДА ГОД(ВТДаты.Период) = 2024 ТОГДА "2024"
ИНАЧЕ "ХХХХ"
КОНЕЦ + "-" + ВЫБОР
КОГДА МЕСЯЦ(ВТДаты.Период) = 1 ТОГДА "01"
КОГДА МЕСЯЦ(ВТДаты.Период) = 2 ТОГДА "02"
КОГДА МЕСЯЦ(ВТДаты.Период) = 3 ТОГДА "03"
КОГДА МЕСЯЦ(ВТДаты.Период) = 4 ТОГДА "04"
КОГДА МЕСЯЦ(ВТДаты.Период) = 5 ТОГДА "05"
КОГДА МЕСЯЦ(ВТДаты.Период) = 6 ТОГДА "06"
КОГДА МЕСЯЦ(ВТДаты.Период) = 7 ТОГДА "07"
КОГДА МЕСЯЦ(ВТДаты.Период) = 8 ТОГДА "08"
КОГДА МЕСЯЦ(ВТДаты.Период) = 9 ТОГДА "09"
КОГДА МЕСЯЦ(ВТДаты.Период) = 10 ТОГДА "10"
КОГДА МЕСЯЦ(ВТДаты.Период) = 11 ТОГДА "11"
ИНАЧЕ "12"
КОНЕЦ + "-" + ВЫБОР
КОГДА ДЕНЬ(ВТДаты.Период) = 1 ТОГДА "01"
КОГДА ДЕНЬ(ВТДаты.Период) = 2 ТОГДА "02"
КОГДА ДЕНЬ(ВТДаты.Период) = 3 ТОГДА "03"
КОГДА ДЕНЬ(ВТДаты.Период) = 4 ТОГДА "04"
КОГДА ДЕНЬ(ВТДаты.Период) = 5 ТОГДА "05"
КОГДА ДЕНЬ(ВТДаты.Период) = 6 ТОГДА "06"
КОГДА ДЕНЬ(ВТДаты.Период) = 7 ТОГДА "07"
КОГДА ДЕНЬ(ВТДаты.Период) = 8 ТОГДА "08"
КОГДА ДЕНЬ(ВТДаты.Период) = 9 ТОГДА "09"
КОГДА ДЕНЬ(ВТДаты.Период) = 10 ТОГДА "10"
КОГДА ДЕНЬ(ВТДаты.Период) = 21 ТОГДА "21"
КОГДА ДЕНЬ(ВТДаты.Период) = 22 ТОГДА "22"
КОГДА ДЕНЬ(ВТДаты.Период) = 23 ТОГДА "23"
КОГДА ДЕНЬ(ВТДаты.Период) = 24 ТОГДА "24"
КОГДА ДЕНЬ(ВТДаты.Период) = 25 ТОГДА "25"
КОГДА ДЕНЬ(ВТДаты.Период) = 26 ТОГДА "26"
КОГДА ДЕНЬ(ВТДаты.Период) = 27 ТОГДА "27"
КОГДА ДЕНЬ(ВТДаты.Период) = 28 ТОГДА "28"
КОГДА ДЕНЬ(ВТДаты.Период) = 29 ТОГДА "29"
КОГДА ДЕНЬ(ВТДаты.Период) = 30 ТОГДА "30"
ИНАЧЕ "31"
КОНЕЦ КАК ДатаСтрокой
ИЗ
ВТДаты КАК ВТДаты
ВЫБРАТЬ
НАЧАЛОПЕРИОДА(ЗаказыКлиентов.Период, ДЕНЬ) КАК Период
ПОМЕСТИТЬ ВТДаты
ИЗ
РегистрНакопления.ЗаказыКлиентов КАК ЗаказыКлиентов
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТДаты.Период КАК Период,
ВЫБОР
КОГДА ГОД(ВТДаты.Период) = 2000 ТОГДА "2000"
КОГДА ГОД(ВТДаты.Период) = 2001 ТОГДА "2001"
КОГДА ГОД(ВТДаты.Период) = 2002 ТОГДА "2002"
КОГДА ГОД(ВТДаты.Период) = 2003 ТОГДА "2003"
КОГДА ГОД(ВТДаты.Период) = 2004 ТОГДА "2004"
КОГДА ГОД(ВТДаты.Период) = 2005 ТОГДА "2005"
КОГДА ГОД(ВТДаты.Период) = 2006 ТОГДА "2006"
КОГДА ГОД(ВТДаты.Период) = 2007 ТОГДА "2007"
КОГДА ГОД(ВТДаты.Период) = 2008 ТОГДА "2008"
КОГДА ГОД(ВТДаты.Период) = 2009 ТОГДА "2009"
КОГДА ГОД(ВТДаты.Период) = 2010 ТОГДА "2010"
КОГДА ГОД(ВТДаты.Период) = 2011 ТОГДА "2011"
КОГДА ГОД(ВТДаты.Период) = 2012 ТОГДА "2012"
КОГДА ГОД(ВТДаты.Период) = 2013 ТОГДА "2013"
КОГДА ГОД(ВТДаты.Период) = 2014 ТОГДА "2014"
КОГДА ГОД(ВТДаты.Период) = 2015 ТОГДА "2015"
КОГДА ГОД(ВТДаты.Период) = 2016 ТОГДА "2016"
КОГДА ГОД(ВТДаты.Период) = 2017 ТОГДА "2017"
КОГДА ГОД(ВТДаты.Период) = 2018 ТОГДА "2018"
КОГДА ГОД(ВТДаты.Период) = 2019 ТОГДА "2019"
КОГДА ГОД(ВТДаты.Период) = 2020 ТОГДА "2020"
КОГДА ГОД(ВТДаты.Период) = 2021 ТОГДА "2021"
КОГДА ГОД(ВТДаты.Период) = 2022 ТОГДА "2022"
КОГДА ГОД(ВТДаты.Период) = 2023 ТОГДА "2023"
КОГДА ГОД(ВТДаты.Период) = 2024 ТОГДА "2024"
ИНАЧЕ "ХХХХ"
КОНЕЦ + "-" + ВЫБОР
КОГДА МЕСЯЦ(ВТДаты.Период) = 1 ТОГДА "01"
КОГДА МЕСЯЦ(ВТДаты.Период) = 2 ТОГДА "02"
КОГДА МЕСЯЦ(ВТДаты.Период) = 3 ТОГДА "03"
КОГДА МЕСЯЦ(ВТДаты.Период) = 4 ТОГДА "04"
КОГДА МЕСЯЦ(ВТДаты.Период) = 5 ТОГДА "05"
КОГДА МЕСЯЦ(ВТДаты.Период) = 6 ТОГДА "06"
КОГДА МЕСЯЦ(ВТДаты.Период) = 7 ТОГДА "07"
КОГДА МЕСЯЦ(ВТДаты.Период) = 8 ТОГДА "08"
КОГДА МЕСЯЦ(ВТДаты.Период) = 9 ТОГДА "09"
КОГДА МЕСЯЦ(ВТДаты.Период) = 10 ТОГДА "10"
КОГДА МЕСЯЦ(ВТДаты.Период) = 11 ТОГДА "11"
ИНАЧЕ "12"
КОНЕЦ + "-" + ВЫБОР
КОГДА ДЕНЬ(ВТДаты.Период) = 1 ТОГДА "01"
КОГДА ДЕНЬ(ВТДаты.Период) = 2 ТОГДА "02"
КОГДА ДЕНЬ(ВТДаты.Период) = 3 ТОГДА "03"
КОГДА ДЕНЬ(ВТДаты.Период) = 4 ТОГДА "04"
КОГДА ДЕНЬ(ВТДаты.Период) = 5 ТОГДА "05"
КОГДА ДЕНЬ(ВТДаты.Период) = 6 ТОГДА "06"
КОГДА ДЕНЬ(ВТДаты.Период) = 7 ТОГДА "07"
КОГДА ДЕНЬ(ВТДаты.Период) = 8 ТОГДА "08"
КОГДА ДЕНЬ(ВТДаты.Период) = 9 ТОГДА "09"
КОГДА ДЕНЬ(ВТДаты.Период) = 10 ТОГДА "10"
КОГДА ДЕНЬ(ВТДаты.Период) = 21 ТОГДА "21"
КОГДА ДЕНЬ(ВТДаты.Период) = 22 ТОГДА "22"
КОГДА ДЕНЬ(ВТДаты.Период) = 23 ТОГДА "23"
КОГДА ДЕНЬ(ВТДаты.Период) = 24 ТОГДА "24"
КОГДА ДЕНЬ(ВТДаты.Период) = 25 ТОГДА "25"
КОГДА ДЕНЬ(ВТДаты.Период) = 26 ТОГДА "26"
КОГДА ДЕНЬ(ВТДаты.Период) = 27 ТОГДА "27"
КОГДА ДЕНЬ(ВТДаты.Период) = 28 ТОГДА "28"
КОГДА ДЕНЬ(ВТДаты.Период) = 29 ТОГДА "29"
КОГДА ДЕНЬ(ВТДаты.Период) = 30 ТОГДА "30"
ИНАЧЕ "31"
КОНЕЦ КАК ДатаСтрокой
ИЗ
ВТДаты КАК ВТДаты
(6)Так преобразований меньше.
Если собирать дату нужно:
1. Разделить строку на части
2. Каждую часть преобразовать в число (прямых функций нет)
3. Из чисел через "ДАТАВРЕМЯ" собрать дату.
А тут две операции
1. Выделение части даты числом (год, месяц, дата)
2. Собираем результат через ВЫБОР и соединение строк.
А если через СКД попробовать? Там же можно задействовать пользовательские функции. Только надо не отчёт, а что-то машино-читаемое, т. к. по этой выборке ещё алгоритм пробежаться должен. Это как-то надо с компоновщиком извращаться?
(10) Тогда уж проще вспомогательное поле даты в справочник прописать. Только, в отличие от Вашего решения, пользователей выгонять из базы придётся, а обидно, ведь обработка разовая. Или расширением воспользоваться?
(25) без связи будет перерабатывать первый запрос. Конечно, можно выгрузить второй в массив и сделать "ГДЕ ... В ...", но там 325 элементов, что тоже не фонтан.
(15)и каким образом поле типа дата будет нарушать реляционную модель?
чтобы не было дублирования данных, значения типа дата необходимо хранить значением типа дата, а не строка, как сделано у вас.
(17) таким образом, что типа "Дата" для кода нет. Поэтому мне придётся либо проверять уникальность этого поля ручками, либо хранить 2 поля и ручками же поддерживать их соответствие.
Обидно, что в Аccess автоматическая проверка уникальности поля и условий в том числе и на несколько полей была ещё 30 лет назад.
(12) Кстати, о ТЗ. Можно и вручную пробежаться по ТЗ и найти её пересечение с другой. Связь-то мне для этого была нужна. Только всё решения какие-то неизящные.