需要帮助了解这些SQL结果

时间:2014-05-07 04:00:48

标签: sql crystal-reports

我正在修改计算每班工作人员数量的Crystal Report。在查看SQL时,我注意到一些事情似乎并不正确。我正在复制和粘贴4个基本相同的SQL语句,除了两个计数(一个不同的计数),而另外两个列出了工作人员的personID(一个不同的列表)。 DISTINCT Count语句不会产生预期结果。希望有人能帮我理解发生的事情:

(select (personid) from rpt_peoplestaffingroledetail where roleid in (select roleid
from   rpt_peopleroledef where affectdash = 1) and shiftid in 
(select shiftid from rpt_staffingeventshiftdetail where driveshiftid = '623044'))

给出: 人物:51135,51135,51135,61905,62926

有意义的是,有三个人配备了这个班次,一个有三个角色。

当我执行不同的列表时:

(select distinct (personid) from rpt_peoplestaffingroledetail where roleid in 
(select roleid from rpt_peopleroledef where affectdash = 1) and shiftid in 
(select shiftid from rpt_staffingeventshiftdetail where driveshiftid = '623044'))

我得到: 人:51135,61905,62926

这似乎也是正确的,有三个人分配到这个班次(一个有多个角色,但是明显使它有效)

所以,当我想计算人员数量时:

(select count (personid) from rpt_peoplestaffingroledetail where roleid in 
(select roleid from rpt_peopleroledef where affectdash = 1) and shiftid in 
(select shiftid from rpt_staffingeventshiftdetail where driveshiftid = '623044'))

结果是5.这是合乎逻辑的,3人配备人员+一人3人。

所以这就是我遇到麻烦的地方,我只想要计算不同的人物ID:

(select distinct count (personid) from rpt_peoplestaffingroledetail where roleid in 
(select roleid from rpt_peopleroledef where affectdash = 1) and shiftid in 
(select shiftid from rpt_staffingeventshiftdetail where driveshiftid = '623044'))

这里的结果集仍然是5.而且我认为它应该是3,但我无法弄清楚为什么它是错误的。

建议?

1 个答案:

答案 0 :(得分:4)

select distinct count (personid)表示计数(只是一个数字),然后是一个不同的列表(仍然是一个数字)。

您需要select count (distinct personid),这意味着计算不同的personid