求救SQL分组查询统计查询语句
有一用户表格user,有三个字段,
序号 姓名 登录日期
1 a 2009-3-1
2 ab 2009-4-15
3 abc 2009-5-15
4 a 2009-3-15
现在我想用SQL查询出全部用户指定日期范围内每月的登录次数,如果该月没有登录,则统计为0.这个语句该怎么写呢?谢谢回答!
要求结果为
姓名 次数 日期
a 2 2009-3
ab 0 2009-3
abc 0 2009-3
a 0 2009-4
ab 1 2009-4
bc 0 2009-4
a 0 2009-5
ab 0 2009-5
abc 1 2009-5
[解决办法]
- SQL code
create table tb(序号 int, 姓名 varchar(10), 登录日期 datetime)insert into tb values(1 , 'a' , '2009-3-1') insert into tb values(2 , 'ab', '2009-4-15') insert into tb values(3 , 'abc', '2009-5-15') insert into tb values(4 , 'a' , '2009-3-15')goselect t1.姓名 , isnull(t2.次数,0) 次数 , t1.登录日期 日期 from(select distinct m.姓名 , convert(varchar(7),n.登录日期,120) 登录日期 from tb m , tb n) t1left join(select 姓名 , convert(varchar(7),登录日期,120) 登录日期 , count(1) 次数 from tb group by 姓名 , convert(varchar(7),登录日期,120)) t2on t1.姓名 = t2.姓名 and t1.登录日期 = t2.登录日期order by t1.登录日期 , t1.姓名drop table tb /*姓名 次数 日期---------- ----------- -------a 2 2009-03ab 0 2009-03abc 0 2009-03a 0 2009-04ab 1 2009-04abc 0 2009-04a 0 2009-05ab 0 2009-05abc 1 2009-05(9 行受影响)*/
[解决办法]
- SQL code
select u1.姓名,u1.日期,count(u2.序号) as 次数 from (select distinct a.姓名,format(b.登录日期,'yyyy-mm') as 日期 from [User] a,[User] b) u1 left join [User] u2 on u1.姓名=u2.姓名 and u1.日期=format(u2.登录日期,'yyyy-mm') where format(u2.登录日期,'yyyy-mm-dd') between '2009-01-01' and '2010-07-31' or u2.登录日期 is nullgroup by u1.姓名,u1.日期 order by u1.日期