Обработка дат в ACCESS

riosun

Доброго дня, УВАЖАЕМЫЕ.Как бы мне решить проблему в запросом. Я - только пользователь.В перекрёстном запросе создаю колонки по полю "дата". Если пишу Выражение1: DatePart("m";[Даты постановок].[Дата]), генерирует 12 колонок по месяцам, если Выражение1: DatePart("yyyy";[Даты постановок].[Дата]), колонки по годам (сколько их есть в базе), если Выражение1: DatePart("ww";[Даты постановок].[Дата]), 51 колонка по неделям. Но если берётся период 3 года и нужно сделать 36 колонок с месяцами, напр. 1/2004, 2/2004 и т.д.
12 ответов

riosun

DatePart("m";[Даты постановок].[Дата]) & "/" & DatePart("yyyy";[Даты постановок].[Дата])???


riosun

а если поставитьformat([Даты постановок].[Дата];"m/yyyy") ?


riosun

DatePart("m";[Даты постановок].[Дата]) & "/" & DatePart("yyyy";[Даты постановок].[Дата])???
Работает. Спасибо. Как же это я забыл про &? Хотя сортирует колонки криво. Т.е. 1/2004, 10/2004, 2/2004, 3/2004, 4/2004.


riosun

а я опять с формат :)format(#дата#,"mm/yyyy") - тогда и сортировать должно нормально


riosun

а если поставитьformat([Даты постановок].[Дата];"m/yyyy") ?
Тоже работает. Спасибо.


riosun

чтобы правильно сортировало надо сначала год потом месяц


riosun

Либо принудительно указать порядок столбцов в окне свойства запроса или текстеPIVOT format(#дата#,"mm/yyyy") In (1/2004, 2/2004, 3/2004 etc)--RegardsAlexander Artamonov


riosun

чтобы правильно сортировало надо сначала год потом месяц
Привет, Алексей! Пробовал. Получается: 2003/1, 2004/1, 2005/1, 2003/2, ...


riosun

Привет, Алексей! Пробовал. Получается: 2003/1, 2004/1, 2005/1, 2003/2, ...


riosun

Привет, Алексей! Пробовал. Получается: 2003/1, 2004/1, 2005/1, 2003/2, ...
надо переключить конструктор запроса в вид SQL и грохнуть начиная с IN до конца


riosun

А можно попробовать в исходной таблице задать тип даных на поле дата "Краткий формат даты" - если это изначально не так, могут быть такие проблемы


riosun

А может это подойдетformat([Даты постановок].[Дата];"yyyy/mm") Сортировать должно правильно.Ну если не получиться то тогда придется отказаться от перекрестного запроса и явно в запросе указывать колонкиSELECT ...,Sum(IIF(format([Даты постановок].[Дата],"yyyymm") = "200401,...,0) as 200401,...FROM ...GROUP BY ..ORDER BY ..