Как получить месяц и год в одном столбце и сгруппировать данные за все годы и месяцы? - PullRequest
2 голосов
/ 10 января 2011

Для запроса ниже (sdate - это имя столбца, а имя таблицы - сохраненные данные)

Collapse
WITH TotalMonths AS (SELECT T1.[Month], T2.[Year]
 FROM ((SELECT DISTINCT Number AS [Month]
FROM MASTER.dbo.spt_values WHERE [Type] = 'p' AND Number BETWEEN 1 AND 12) T1 CROSS JOIN
 (SELECT DISTINCT DATEPART(year, sdate) AS [Year]
FROM storedata) T2))

SELECT CTE.[Year], CTE.[Month], ISNULL(T3.[Sum], 0) areasum
FROM TotalMonths CTE LEFT OUTER JOIN (
SELECT SUM(areasft) [Sum], DATEPART(YEAR, sdate) [Year], DATEPART(MONTH, sdate) [Month]
FROM storedata
GROUP BY DATEPART(YEAR, sdate) ,DATEPART(MONTH, sdate)) T3
ON CTE.[Year] = T3.[Year] AND CTE.[Month] = T3.[Month] WHERE CTE.[Year]>'2007'
ORDER BY CTE.[Year], CTE.[Month]

Я получаю набор результатов, как показано ниже.

YEAR MONTH AREASUM
2008    1   0
2008    2   1193
2008    3   4230
2008    4   350
2008    5   2200
2008    6   4660
2008    7   0
2008    8   6685
2008    9   0
2008    10  3051
2008    11  7795
2008    12  2940
2009    1   1650
2009    2   3235
2009    3   2850
2009    4   6894
2009    5   3800
2009    6   2250
2009    7   1000
2009    8   1800
2009    9   1550
2009    10  2350
2009    11  0
2009    12  1800

Но я должен объединить месяц и год в одном столбце. Набор результатов должен выглядеть следующим образом.

JAN/08   O
FEB/08 1193
.. ..
.. ..
DEC/O9 1800

Как мне изменить мой запрос? (Я должен отображать для всех лет и месяцев, даже если в течение месяца нет места)

С уважением,

N.SRIRAM

Ответы [ 2 ]

1 голос
/ 10 января 2011

Попробуйте:

SELECT CONVERT(VARCHAR(3), DATENAME(MONTH, CTE.Month), 7) + '/' + RIGHT(CTE.Year, 2)

вместо того, чтобы использовать ваши первые 2 столбца из вашего SELECT.

0 голосов
/ 21 января 2011

Похоже, вы говорите, что получаете правильные данные из исходного запроса, но неверный формат. Так

  1. Сделайте вид из запроса, который вы первоначально разместили.
  2. Создайте запрос SELECT на основе этого представления, чтобы получить нужный вам формат.

Допустим, вы делаете это:

CREATE VIEW wibble AS <your original query goes here>

Тогда вы можете просто запросить wibble, чтобы исправить форматирование.

select 
case
    when month = 1 then 'Jan/'
    when month = 2 then 'Feb/'
    when month = 3 then 'Mar/'
    when month = 4 then 'Apr/'
    when month = 5 then 'May/'
    when month = 6 then 'Jun/'
    when month = 7 then 'Jul/'
    when month = 8 then 'Aug/'
    when month = 9 then 'Sep/'
    when month = 10 then 'Oct/'
    when month = 11 then 'Nov/'
    when month = 12 then 'Dec/'
    else 'Err'
end || substring(cast(year as CHAR(4)), 3, 2) as yearmonth,
areasum from wibble;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...