注册 登录
编程论坛 SQL Server论坛

关于一条语句返回多个count值

lovechunhuip 发布于 2016-07-12 13:14, 7868 次点击
SELECT COUNT(time) FROM `aaaa` WHERE `time` >= '2016/1/1 0:00:00' AND `time` <= '2016/7/1 23:59:59' and time like '% 13:%';

SELECT COUNT(time) FROM `aaaa` WHERE `time` >= '2016/1/1 0:00:00' AND `time` <= '2016/7/1 23:59:59' and time like '% 14:%';

SELECT COUNT(time) FROM `aaaa` WHERE `time` >= '2016/1/1 0:00:00' AND `time` <= '2016/7/1 23:59:59' and time like '% 18:%';

这三条语句怎么能合成一个语句呢?  其实是前边的条件都是一样的,就是最后那个不一样
10 回复
#2
mywisdom882016-07-12 13:38
用 union all 来把你3个查询合并起来。如:
SELECT COUNT(time) FROM `aaaa` WHERE `time` >= '2016/1/1 0:00:00' AND `time` <= '2016/7/1 23:59:59' and time like '% 13:%'
union all
SELECT COUNT(time) FROM `aaaa` WHERE `time` >= '2016/1/1 0:00:00' AND `time` <= '2016/7/1 23:59:59' and time like '% 14:%'
union all
SELECT COUNT(time) FROM `aaaa` WHERE `time` >= '2016/1/1 0:00:00' AND `time` <= '2016/7/1 23:59:59' and time like '% 18:%'
#3
mywisdom882016-07-12 13:40
SELECT COUNT(time) FROM `aaaa` WHERE `
 (time` >= '2016/1/1 0:00:00' AND `time` <= '2016/7/1 23:59:59' and time like '% 13:%') OR
 (time` >= '2016/1/1 0:00:00' AND `time` <= '2016/7/1 23:59:59' and time like '% 14:%') OR
 (time` >= '2016/1/1 0:00:00' AND `time` <= '2016/7/1 23:59:59' and time like '% 18:%')
也可以
#4
lovechunhuip2016-07-12 13:53
回复 2楼 mywisdom88
非常感谢,好用了。我这个的本意是查询一年中某些个月的记录个数的,我的想法是不是太过粗鲁和费时了,有没有更简单的方法呢?
#5
mywisdom882016-07-12 17:58
以下是引用lovechunhuip在2016-7-12 13:53:14的发言:

非常感谢,好用了。我这个的本意是查询一年中某些个月的记录个数的,我的想法是不是太过粗鲁和费时了,有没有更简单的方法呢?

如果,只是查询某个月的记录数,可以简化,查2016年,1,3,5,7月的记录数
SELECT COUNT(time) FROM `aaaa` WHERE `year(time) =2016 and (month(time)=1 or month(time)=3 or month(time)=5 or month(time)=7)
#6
lovechunhuip2016-07-13 10:13
回复 5楼 mywisdom88
谢谢您,不好意思,我是个初学者,试了您给的这个语句,出现的错误是 Unknown column 'year(time) =2016 and (month(time)=1 or month(time)=3 or month(time)=5 or month(time)=7)' in 'where clause'    这难道是单独定义年月日什么的吗,我在数据库里定义的字段名是time,类型是datatime,  2016-06-13 14:21:33这样的
#7
mywisdom882016-07-13 11:27
declare @time datetime
set @time=getdate()
select year(@time)as 年,month(@time)as 月,day(@time)as 日

只有本站会员才能查看附件,请 登录
#8
mywisdom882016-07-13 11:46
--year(),month(),day()分别是取年,月,日的函数
create table test(id int,name varchar(20),dt datetime)
insert into test(id,name,dt) values(1,'张三','2016-07-13')
insert into test(id,name,dt) values(2,'李四','2016-07-14')
select id,name,year(dt) as 年,month(dt) as 月,day(dt) as 日 from test where year(dt)=2016 and month(dt)=7 and day(dt)=13

#9
lovechunhuip2016-07-13 14:22
回复 8楼 mywisdom88
版主太给力了,非常感谢,彻底解决了我的问题!
#10
zjh0721442016-07-19 19:29
版主,果然厉害,有没有关于SQL的资料分享下,我感觉数据库SQL这一块 很薄弱。
#11
mywisdom882016-07-20 08:46
以下是引用zjh072144在2016-7-19 19:29:18的发言:

版主,果然厉害,有没有关于SQL的资料分享下,我感觉数据库SQL这一块 很薄弱。

没有,我也是边学边回答的,我会的就直接回答,不会的,找资料,问度娘。
1