一道关于SQL查询日期,金额的题目

来源:百度知道 编辑:UC知道 时间:2024/06/20 15:57:53
输入任意2个时间,查询在这一时间段内每天8点到9点的销售金额
显示效果大概为:
日期 金额
2008-05-20 321782.7489
2008-05-21 573842.4323
2008-05-22 563247.4321
.....
.....
我写的代码是这样,但是显示不了“每天8点到9点”这个条件,向各位大侠寻求帮助,修改下我的代码:
create procedure test2
@fristday datetime,
@lastday datetime
as
select cast(convert(varchar(12),recmaster.recdtm,111) as datetime) as '日期',sum(recdetail.recprc) as '金额'
from recmaster,recdetail
where recmaster.billno=recdetail.billno and recmaster.depoid=recdetail.depoid
group by cast(convert(varchar(12),recmaster.recdtm,111) as datetime)
having cast(convert(varchar(12),recmaster.recdtm,111) as datetime)>=@fristday
and cast(convert(varchar(12),recmaster.recdtm,111) as datetime)<=@lastday
order by cast(convert(varchar(12),recmaster.recdtm,111) as datetime)
go
语法没错
但是没有显示出数据,估计是表逻辑结构有问题
还是要感谢你!~

有三点说明一下,
第一:条件里边并未用到聚合函数,不能加到having里边,需要加到where里边
第二:段区域查询最好写成between and 类型的,那样看着明了一些
第三:order by里边是可以写别名的,但是group by里边不能写别名
以下是我修改的代码:

create procedure test2
@fristday datetime,
@lastday datetime
as
select cast(convert(varchar(12),recmaster.recdtm,111) as datetime) as '日期',sum(recdetail.recprc) as '金额'
from recmaster,recdetail
where recmaster.billno=recdetail.billno and recmaster.depoid=recdetail.depoid
and cast(convert(varchar(12),recmaster.recdtm,111) as datetime) between @fristday and @lastday
group by cast(convert(varchar(12),recmaster.recdtm,111) as datetime)
order by cast(convert(varchar(12),recmaster.recdtm,111) as datetime)

或:

create procedure test2
@fristday datetime,
@lastday datetime
as
select cast(convert(varchar(12),recmaster.recdtm,111) as datetime) as '日期',sum(recdetail.recprc) as '金额'
from recmaster,recdetail