查询的参数,开始日期是A,结束日期是B,要得出A-B范围每天的就餐人数,如何实现,报餐行数据见图

企业微信截图_15926363068662.png

FineReport 13225099418 发布于 2020-6-20 15:19
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
1
zsh331Lv8专家互助
发布于2020-6-21 23:28

这个看似简单的问题,其实有一定的复杂度。


提供个思路,准备一个就餐人员和日期维度表,做笛卡尔积运算,再与事实表做关联得到就餐人员的就餐日期(字段)结果表,最后 : select count(distinct 就餐人数) from 结果表 group by 就餐日期

最佳回答
0
yikefuLv6初级互助
发布于2020-6-20 15:25(编辑于 2020-6-20 15:30)

select count() from 表名 where 日期字段>='开始的日期' and  日期字段 < = '结束的日期' 


开始 和 结束  = '${控件名称}' 

最佳回答
0
北纬六十六度Lv4初级互助
发布于2020-6-21 11:45


create procedure searchcount @bdate datetime,@edate datetime as

--创建日期就餐人数临时表

SELECT getdate() d,0 as c INTO #data where 1=2


--根据起止时间生成临时表,将时间段内所有日期插入表内

--创建日期临时表

SELECT DATEADD(day,1,@bdate) d INTO #date where 1=2

--生成日期

DECLARE @num INT=0

DECLARE @h int

SELECT @h=DATEDIFF(day,@bdate,@edate)

WHILE(@num<=@h)

BEGIN

    INSERT INTO #date values (DATEADD(day,@num,@bdate))

    SET @num=@num+1

END

--定义就餐人数

DECLARE @cnt int


DECLARE datac CURSOR --定义游标

FOR (SELECT d FROM #date  ) --查出需要的集合放到游标中

OPEN datac; --打开游标

FETCH NEXT FROM rooms INTO @d; --读取第一行数据

WHILE @@FETCH_STATUS = 0

    BEGIN

--查询日期内就餐人数

select @cnt=count(*) from 报餐数据表 where @d between 开始日期  and 结束日期 and 是否通过审核=已审核

insert into #data(d,c) valuse(@d,@cnt)

        FETCH NEXT FROM datac INTO @d; --读取第一行数据

    END

CLOSE datac; --关闭游标

DEALLOCATE datac; --释放游标


select * from #data order by d


drop table #date,#data


给你写个存储过程,自己修改测试

最佳回答
0
luojian0323Lv7资深互助
发布于2020-12-26 10:46
  • 5关注人数
  • 446浏览人数
  • 最后回答于:2020-12-26 10:46
    请选择关闭问题的原因
    确定 取消
    返回顶部