2013-09-24 3 views
1

У меня есть следующий запрос, где @BeginTime - это первый день месяца, а @EndTime - последний день месяца.Добавление года и месяца в группу по sql-запросу

SET @BeginTime = RTRIM(@BeginTime) + ' 00:00:00' 
SET @EndTime = RTRIM(@EndTime) + ' 23:59:59' 

select C.Name , COUNT(DISTINCT D.Id) from DriverLic D 
INNER JOIN Clov C WITH (NOLOCK) ON D.CId = C.CId 

AND ((D.RDate < @EndTime) 
AND (D.UrDate > @BeginTime)) 

group by C.Name 

я получаю выход что-то вроде этого:

Name Count(D.Id) 
AC  22 
AB  32 
CD  11 

Я хотел бы получить на выходе что-то вроде этого:

Year Month Name Count(D.id) 
2013 8  AC  22 
2013 8  AB  32 
2013 8  CD  11 

Есть ли способ, я могу добиться этого?

+2

1. Ваши параметры не являются частью вашего запроса? 2. Я подозреваю, что очень вероятно, что вы [неправильно понимаете свой диапазон дат] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/16/bad-habits-to-kick-mishandling-date-range -queries.aspx), я полагаю, вы создаете дату со временем '23: 59: 59', поэтому вы можете использовать оператор' between', забыв, что есть моменты после '23: 59: 59' и до' 00 : 00: 00'. – GarethD

+0

эй, я использую BeginTime и EndTime, я оставил его вне вопроса, поскольку я думал, что это упростит чтение. Я предполагаю, что это вызывает путаницу. Позвольте мне отредактировать его, чтобы включить что-то похожее на то, что у меня есть в моем коде .. Спасибо, что указали. Это имеет смысл? – CodeNinja

ответ

4

Да,

SELECT Year(yourDateColumn) AS 'Year', Month(yourDateColumn) AS 'Month', C.Name, COUNT(DISTINCT D.Id) 
from DriverLic D 
    INNER JOIN Clov C WITH (NOLOCK) ON D.CId = C.CId 
--WHERE your where conditions should go here... 
GROUP BY 
    Year(yourDateColumn), Month(yourDateColumn), C.Name 
+1

+1 Единственное, что я хотел бы добавить к этому, - это псевдоним Года и Месяц Колонки Year (yourDateColumn) в качестве Года. –

+0

Я делаю группу по году (@BeginTime), месяц (@BeginTime), C.Name a Я получаю сообщение об ошибке «Каждое выражение GROUP BY должно содержать по крайней мере один столбец, который не является внешней ссылкой». – CodeNinja

+2

@Agent 007 Попробуйте удалить Year (@BeginTime), месяц (@BeginTime) из предложения GROUP BY. –

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