2013-09-24 50 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和Month Columns Year(yourDateColumn)的年份别名。 –

+0

我按年分组(@BeginTime),月(@BeginTime),C.Name我得到一个错误“每个GROUP BY表达式都必须包含至少一个不是外部引用的列。 – CodeNinja

+2

@Agent 007尝试从GROUP BY子句中删除Year(@BeginTime),Month(@BeginTime)。 –