2010-09-23 4 views
1

Мне нужна помощь в создании запроса для получения информации о выбранном году и предыдущем году года. Нужно быть на четверть (QTR) за оба года. QTR1 всегда будет месяц 03, QTR2 месяц 06, QTR3 месяц 09, & QTR4 месяц 12. Никакие вычисления не требуются или не усредняются.Запрос на несколько дат

Поля/столбцы годМесяц хранятся в виде мм/дд/гггг с дд всегда быть 01, ACTUAL_MONTH (с плавающей точкой) для всех QTRs на основе текущей годМесяц выбраны и за один год до, TARGET_MONTH (с плавающей точкой) для всех QTRs на основе годМесяц выбран , и PROJECTION_MONTH (float) для всех выбранных YTRANTH на основе QTR.

Таблица

YEARMONTH (PK, Datetime) 
ACTUAL_MONTH(Float) 
TARGET_MONTH(Float) 
PROJECTION_MONTH(Float) 

Должен выглядеть если годМесяц в 2010 году был выбран

    Q1 Q2 Q3 Q4 
09-Actual  xxx xxx xxx xxx 
10-Actual  xxx xxx xxx xxx 
10-Target  xxx xxx xxx xxx 
10-Projection xxx xxx xxx xxx 
+2

Какие СУБД вы используете? –

+0

Привет, его Microsoft SQL 2008 – 2010-09-23 20:33:36

+1

Copyvio http://social.msdn.microsoft.com/Forums/en-US/transactsql/thread/a4e47578-e30b-41d8-ba23-6a92c2504e26 - см. [Пользователь берет вопросы из MSDN форумы, спрашивая их о SO и отправляя ответы SO на MSDN] (http://meta.stackexchange.com/questions/65954/a-user-is-taking-questions-from-msdn-forums-asking-them -он-так-проводка-The-s). – Dori

ответ

0

Для решения этой проблемы можно использовать несколько подход, чтобы получить результат. Некоторые из них должны унифицировать результат на основе типа QTR. Итак, может быть, это простой способ получить результат.

Во-первых, попробуйте получить только actual_month QTR на основе предоставленного YearMonth. Завещание запрос выглядит следующим образом:

SELECT 
QTRType = cast(year(YearMonth as varchar(10)) + '-Actual', 
Q1 = case when month(YearMonth) = 3 then Actual_Month else 0 end, 
Q2 = case when month(YearMonth) = 6 then Actual_Month else 0 end, 
Q3 = case when month(YearMonth) = 9 then Actual_Month else 0 end, 
Q4 = case when month(YearMonth) = 12 then Actual_Month else 0 end 

FROM Table1 
WHERE 
year(YearMonth) <= 2010 

Приведенный выше запрос будет возвращать все фактический тип четв. Итак, следующий шаг, с таким же подходом, постарайтесь получить целевой тип QTR и проекционный QTR. После того, как вы его получите, просто соедините весь запрос, используя ключевое слово union all.

Окончательный запрос:

SELECT 
QTRType = cast(year(YearMonth as varchar(10)) + '-Actual', 
Q1 = case when month(YearMonth) = 3 then Actual_Month else 0 end, 
Q2 = case when month(YearMonth) = 6 then Actual_Month else 0 end, 
Q3 = case when month(YearMonth) = 9 then Actual_Month else 0 end, 
Q4 = case when month(YearMonth) = 12 then Actual_Month else 0 end 

FROM Table1 
WHERE 
year(YearMonth) <= 2010 

UNION ALL 

SELECT 
QTRType = cast(year(YearMonth as varchar(10)) + '-Target', 
Q1 = case when month(YearMonth) = 3 then Target_Month else 0 end, 
Q2 = case when month(YearMonth) = 6 then Target_Month else 0 end, 
Q3 = case when month(YearMonth) = 9 then Target_Month else 0 end, 
Q4 = case when month(YearMonth) = 12 then Target_Month else 0 end 

FROM Table1 
WHERE 
year(YearMonth) <= 2010 

UNION ALL 

SELECT 
QTRType = cast(year(YearMonth as varchar(10)) + '-Projection', 
Q1 = case when month(YearMonth) = 3 then Projection_Month else 0 end, 
Q2 = case when month(YearMonth) = 6 then Projection_Month else 0 end, 
Q3 = case when month(YearMonth) = 9 then Projection_Month else 0 end, 
Q4 = case when month(YearMonth) = 12 then Projection_Month else 0 end 

FROM Table1 
WHERE 
year(YearMonth) <= 2010 

Надежда, он может просветить вас :)

С уважением, ломаться

Примечание: Я не проверить запрос, но я довольно уверенный, что это сработает :)

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