Для решения этой проблемы можно использовать несколько подход, чтобы получить результат. Некоторые из них должны унифицировать результат на основе типа 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
Надежда, он может просветить вас :)
С уважением, ломаться
Примечание: Я не проверить запрос, но я довольно уверенный, что это сработает :)
Какие СУБД вы используете? –
Привет, его Microsoft SQL 2008 – 2010-09-23 20:33:36
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