свое where для каждого поля

alexmsp
Дата: 03.03.2008 11:47:44
Исходные данные:
Таблица приходов товаров.
Id       -  номер товара
batch - номер партии
datein - дата прихода
am - кол-во в приходе

Id,batch - первичный ключ.

Задача:
Сделать запрос для
Id 
am12 - кол-во за год(12 мес) от тек.даты
...
amX - кол-во за X мес от тек.даты
...
am1 - кол-во за посл. мес от тек.даты
Всего N полей.

Думаю делать так. Создать N запросов вида
SELECT Id, Sum(am) amX
WHERE datein > DateAdd("m";-X;Date())
GROUP BY Id
Затем LEFT JOIN всех этих уже вложенных запросов по полю ID к изначальной таблице.

Есть ли решение лучше? Велкам обсуждать кому интересно,
остальным приношу извинения за потерянное время на чтение топика.
Ёжик`
Дата: 03.03.2008 11:52:55
перекрестный запрос, с помесячными столбцами, за последний год.
alexmsp
Дата: 03.03.2008 12:00:06
Ёжик`
перекрестный запрос, с помесячными столбцами, за последний год.

Да, думал над этим,
это если делать разбивку по месяцам,
а мне не совсем это нужно, а именно:
за год, за 9 посл. мес, за 6 посл. мес, за 3 посл. мес, за посл. мес.
Как в этом случае сделать перекрестный?
CtrlAlt
Дата: 03.03.2008 12:07:23
Если количество колонок фиксировано, то можно сделать одним запросом через группировку.

колонки вида
SUM( IIF(Year(datein)=Year(Date()),am,Null) ) AS SummaZaGod
alexmsp
Дата: 03.03.2008 12:19:18
CtrlAlt
Если количество колонок фиксировано, то можно сделать одним запросом через группировку.
колонки вида
SUM( IIF(Year(datein)=Year(Date()),am,Null) ) AS SummaZaGod

Похоже то что надо, спасибо за совет, что-то не пришло в голову добавить условие внутри Sum.
Спасибо.
alexmsp
Дата: 03.03.2008 13:14:58
Можно было бы конечно еще красивее и перекрестным сделать если б нашелся аналог ф-ции Partition для пересекающихся диапазонов с общей границей(или самому такую ф-ю сделать).