Oracle de comptage le résultat d'une instruction de CAS

Le But /Background

  • Je suis le peignage à travers un workorder système pour voir si les ordres de travail, répondre à certains critères
    • (par exemple, si ils ne sont pas à l'étape 3, scène 2, ou même l'étape 1).
  • Ces "étapes" ont été définis par la direction.
  • J'aimerais groupe par l'année de données, puis le métier, et puis voir comment de nombreux ordres de travail pour que le regroupement dans chacune de ces 3 "étapes".

La Requête

select yearreported
, theleadcraft
, count(NotStage3)
, count(NotStage2)
, count(NotStage1)

from
(
    select extract(year from reportdate) as YearReported
    , Nvl(leadcraft, 'NONE') as TheLeadCraft
    , CASE when status not in ('CAN', 'CLOSE') then 1 else 0 END as NotStage3
    , CASE when status not in ('CAN', 'CLOSE', 'COMP') then 1 else 0 END as NotStage2
    , CASE when status not in ('CAN', 'CLOSE', 'COMP', 'WORKDONE') then 1 else 0  END as NotStage1
    from workorder
) query 

group by yearreported, theleadcraft;
;

Le Problème /Question

  • Cela semble fonctionner, mais tout ce qui compte pour notstage1, notstage2, et notstage1 viennent de la même manière, en dépit de l'interrogation de certaines situations et de trouver un que je sais être différent.
  • Est-ce la bonne façon de mettre en œuvre une instruction case que je veux, compter?
  • Dois-je utiliser DECODE() à la place?

Merci d'avance pour toute aide!

InformationsquelleAutor SeanKilleen | 2013-01-08