2013-03-11 5 views
-1

У меня есть этот запрос:Как отображать данные ежемесячной базы в sql?

declare @startdate datetime='1/1/2012', @endate datetime='12/31/2012' 
select * from hours1 
where date_start between @startdate and @enddate 

Я хочу, чтобы показать данные, такие как:

Jan 
feb 
March 
... 
December 

может помочь мне, как получить это?

+0

Итак, вы хотите сокращайте январь и февраль ... но не март и декабрь ... что о других месяцах? –

+0

Итак, вы хотите сгруппировать по месяцам, что вы хотите показать, кроме имени месяца? Вы хотите подвести столбец или получить количество строк? –

+0

Да, я хочу показать группу данных по месяцу с Годом. Я принимаю сумму (часы), поэтому я хочу показывать часы, используемые каждый месяц. – SQllearner

ответ

2

Я предполагаю, что вы хотите отображать месяцы между датой начала и окончания.

declare @startdate datetime='1/1/2012', 
     @endate datetime='12/31/2012' 

SELECT 
    DATENAME(month, date_start) 
FROM 
    hours1 
WHERE 
    date_start between @startdate and @enddate 
GROUP BY 
    DATENAME(month, date_start), 
    DATEPART(month, date_start) 
ORDER BY 
    DATEPART(month, date_start) 
+0

: но я хочу, чтобы группа зависела от начальной и конечной даты. Если startdate - 3/1/2013, а endddate - «6/30/2012», поэтому он должен показывать такие данные, как: Март Апрель Май Июнь ... Если я использую ваши логика показывает только январь – SQllearner

+0

Затем закажите по дате_старт. –

+0

Возможно, у вас нет данных за эти месяцы. (И это может показать январь, если 'end_date' не в том же году, что и' start_date'.) – Magnus

0

Если вы хотите агрегировать данные на ежемесячной основе, использовать дату функции:

select count(<count_grouped_items), sum(<sum_of_grouped_items>), ... 

from hours1 
where date_start between @startdate and @enddate 
group by YEAR(date_start), MONTH(date_start) 
order by YEAR(date_start) asc, MONTH(date_starts) asc 
+0

это не работает – SQllearner

+0

: но я хочу, чтобы группа зависела от начальной и конечной даты. Если startdate равен 3/1/2013 и endddate это «6/30/2012», поэтому он должен показывать такие данные, как: Март Апрель Май Июнь ... Если я использую вашу логику, он показывает только январь - – SQllearner

+0

Вы уже писали «declare startdate datetime = '1/1/2012», endate datetime = '12/31/2012 ', поэтому он группируется каждый месяц в 2012 году. Я предполагаю, что «date_start» - это имя поля в вашей таблице, содержащее дату в каждой строке, если вы не определили, какие поля в вашей таблице на самом деле содержит else, мой запрос выше не является полным, он показывает только, как вы можете группировать MONTHS. Как уже упоминал Магнус, вы можете получить имя месяца DATENAME –

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