2014-12-30 5 views
1

Я читал и погружался в глубины SQL, и я думаю, что я успешно смутился по этому поводу сейчас. Пример таблица у меня есть:MS Access SQL Transform Aggregate Manipluation значений для Pivot

Date  Quantity  Type  Date_Entered 
01/02/15 23    Orange  10/01/15 
01/02/15 10    Red  10/01/15 
01/02/15 18    Yellow  10/01/15 
02/02/15 15    Yellow  10/01/15 
02/02/15 19    Red  10/01/15 
.   .    .   . 
.   .    .   . 

Дата является календарной датой предполагаемых продаж, количество является количеством продаж, типа является типом продукта (это может изменяться в зависимости от количества видов), Date_Entered является дата, когда данные были помещены в таблицу, и дает прогноз для других столбцов. Для каждого Date_Entered существует диапазон дат (скажем, весь 2015). Для каждой даты доступно все доступные типы.

Теперь, я пытался повернуть таблицу с запросом SQL в MS Access (потому что я использую это с помощью макроса в Excel), чтобы получить таблицу, как следующее:

Date  Orange Red Yellow 
01/02/15 3   2  5 
02/02/15 0   -2  -1 
03/02/15 8   -1  2 
.   .   .  . 
.   .   .  . 

Где значения представляют собой разницу между количеством, проданным за определенную Дату, с одной даты_Энементной на другую (например, изменение прогнозируемых продаж за неделю, месяц, квартал).

До сих пор я эволюционировали следующее:

TRANSFORM IIF(FIRST([Date_Entered]) > LAST([Date_Entered]), 
       FIRST([Quantity]) - LAST([Quantity]), 
       LAST([Quantity]) - FIRST([Quantity])) 
SELECT [Date] FROM Sales WHERE [Date_Entered] = #2015-01-10# OR #2015-01-20# 
GROUP BY [Date] ORDER BY [Date] PIVOT [Type]" 

Однако FIRST(), кажется, просто вывести нули и поэтому выше не дает правильные цифры. Моя проблема, я думаю, разрабатывает совокупность, необходимую для вычисления значений для таблицы. Надеюсь, кто-то может указать мне в правильном направлении.

Благодарим за любые ответы.

ответ

0

Я думаю, проблема связана с предложением WHERE. Вместо

WHERE [Date_Entered] = #2015-01-10# OR #2015-01-20# 

попробовать

WHERE [Date_Entered] IN(#2015-01-10#, #2015-01-20#) 
+0

Просто проверили это и Wow! Спасибо! Некоторое время я боролся за это. Почему дата не принимает «ИЛИ»? и в качестве побочного вопроса можно было бы включить имена полей в возвращаемый запрос? – area9

+0

Рад, что я мог помочь. Дело не в том, что Date не принимает OR, но, как было написано, Access интерпретировал его как логическое, например. # 2015-01-20 # <> Неверно. Если вы включили [Date_Entered] в выражение ([Date_Entered] = # 2015-01-20 #, то вы получили бы тот же результат, что и с использованием предложения IN. –

+0

ah ok - это имеет больше смысла сейчас. – area9

Смежные вопросы