Sql server 2008 r2 MSSQL运行输入输出计数记录

Sql server 2008 r2 MSSQL运行输入输出计数记录,sql-server-2008-r2,crystal-reports,Sql Server 2008 R2,Crystal Reports,我试图创建一个报告,统计每天有多少人登录到某个分区或从某个分区注销 select inout.name_id, nametable.name, inout.datetime, inout.status, inout.section from inout join nametable on inout.name_id = nametable.name_id where inout.date between '1/1/2016' and '1/3/2016' order by inout.date

我试图创建一个报告,统计每天有多少人登录到某个分区或从某个分区注销

select inout.name_id, nametable.name, inout.datetime, inout.status, inout.section
from inout
join nametable on inout.name_id = nametable.name_id
where inout.date between '1/1/2016' and '1/3/2016'
order by inout.date
样本数据:

Datetime          Name   Section  Status
1/1/2016 1:34:56  John   A        IN
1/1/2016 4:11:11  Steve  A        OUT
1/1/2016 18:20:20 Bill   A        IN
1/2/2016 13:13:13 John   A        OUT
1/2/2016 12:12:12 Ben    A        IN
1/3/2016 1:01:01  JIM    A        IN
最后的结果是:

Date      # of people in section

1/1/2016          2
1/2/2016          2
1/3/2016          3

编辑:我想在状态中给一个运行计数加1,在状态中给-1,所以如果一个人上班或下班,我可以看到每天有多少人在某个特定的部门工作,我也不太确定如何为在该日期范围之前在那里的人显示。

这不是答案,但可能有助于他人形象化,也可能启发你,但我认为你确实尝试过:

使用您发布的查询。 在Crystal designer中,通过列“Datetime”创建一个组。 创建一个公式:如果{inout.status}=IN,那么1 else-1。假设它的名字是@Quantifier。 创建一个运行总计字段:要汇总的字段=@Quantifier,汇总类型=总和,为每个记录求值,从不重置。让我们称之为NumberOfPeopleInstitution\u CloseButNoCigar。 将running total字段放在组页脚中。 正如你所说的那样,结果并不是你真正想要的,因为这位史蒂夫已经出局,而此前没有一位史蒂夫加入。所以它仍然需要一个技巧

要将其转换为解决方案,您可以尝试另一个查询以获取初始计数。试着做点什么:

select sum(case when status='IN' then 1 else -1 end)
from inout
join nametable on inout.name_id = nametable.name_id
where inout.datetime < '2016-1-1'

然后在最后的结果中考虑这个初始值。

< P>这不是一个答案,但是可以帮助其他人想象和启发你,但是我想你确实尝试过了:

使用您发布的查询。 在Crystal designer中,通过列“Datetime”创建一个组。 创建一个公式:如果{inout.status}=IN,那么1 else-1。假设它的名字是@Quantifier。 创建一个运行总计字段:要汇总的字段=@Quantifier,汇总类型=总和,为每个记录求值,从不重置。让我们称之为NumberOfPeopleInstitution\u CloseButNoCigar。 将running total字段放在组页脚中。 正如你所说的那样,结果并不是你真正想要的,因为这位史蒂夫已经出局,而此前没有一位史蒂夫加入。所以它仍然需要一个技巧

要将其转换为解决方案,您可以尝试另一个查询以获取初始计数。试着做点什么:

select sum(case when status='IN' then 1 else -1 end)
from inout
join nametable on inout.name_id = nametable.name_id
where inout.datetime < '2016-1-1'

然后在最后的结果中考虑这个初始值。< /P>我不能理解什么是+1和-1,你能解释得更清楚吗?我在想,如果这个人有状态,它会给计数加上1,如果有状态,它会是1。我不明白什么是+1和-1,你能解释得更清楚些吗?我在想,如果一个人的状态是“在”,那么他会在计数中加上+1,如果他状态是“在”,那么他会加上-1。例如,它计算每个部分中这些日期的人数。最后一列带有INvsOUT标签的是公式@Quantifier。最后一列带有INvsOUT标签的是公式@Quantifier