2014-05-07 8 views
2

Je cherche à modifier un rapport Crystal qui calcule le nombre d'employés par équipe. Quand je regarde le SQL, j'ai remarqué que quelque chose ne me semble pas juste. Je copie et colle 4 instructions SQL qui sont essentiellement les mêmes à l'exception de deux count (un compte distinct) tandis que les deux autres listent le personID de la portée (une liste distincte). L'instruction DISTINCT Count n'aboutit pas aux résultats attendus. Espérais que quelqu'un pourrait me aider à comprendre ce qui se passe:Besoin d'aide Comprendre ces résultats SQL

(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')) 

donne: personid: 51135, 51135, 51135, 61905, 62926

Ce qui est logique a il y a trois personnes dotés de personnel pour ce changement, un avec trois rôles.

Lorsque j'effectue une liste distincte:

(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')) 

Je reçois: personid: 51135, 61905, 62926

Ce qui semble à nouveau correct, il y a trois personnes affectées à ce changement (une avec mulitple mais les rôles distincts: le fait fonctionner)

Alors, quand je veux compter le nombre de personnes personnel:

(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')) 

Le résultat est 5. Ce qui est logique, 3 personnes occupées + une personne avec 3 rôles.

C'est donc là j'ai des ennuis, je ne veux que les ID de personne distincts ont été comptabilisés:

(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')) 

Et le résultat défini ici est encore 5. Et je crois qu'il devrait être 3, mais je ne peux pas comprendre pourquoi c'est faux

Suggestions?

Répondre

4

select distinct count (personid) signifie obtenir un nombre (qui est juste un nombre) et ensuite une liste distincte (encore un nombre).

Vous avez besoin de select count (distinct personid), ce qui signifie compter personid.

+1

Génial, merci beaucoup. – MISNole

Questions connexes