Don't know if this has already come through to everyone, if so I apologize.
 
Ok, here's the deal
 
Table1 is a master list holding ID numbers, and related information sent by
clients
 
Table2 is a queue that utilizes Table1.ID numbers, and updates other
information on the current state of a job associated with these ID numbers
within Table2.  This table is used only as a queue, so the Table1.ID numbers
come and go as jobs complete.  There can be multiple instances, or 0
instances of Table1.ID on Table2.
 
Table3 is a log that contains even more information concerning the Table1.ID
numbers, and associated processing information from Table2, and information
of further processing, shipping status, tracking numbers, etc.  There can be
multiple instances, or 0 instances of the Table1.ID number on Table3.
 
So, what I am trying to do is this:
 
      Table1 holds this info(simplified):
            MasterID(Unique)  int 
            NumberRequested   int
 
      Table2 holds this info(simplified):
            MasterID          int 
            OrderID(Unique)   int
 
      Table3 holds this info(simplified):
            MasterID          int
            OrderID(Unique)   int
            JobState          bool
 
What I need to extract, within a single statement, is this:
 
      For each MasterID on Table1
            What is the NumberRequested
            Does the MasterID exist on Table2, if so, 
                  how many times? (QUEUED)
            Does the MasterID exist on Table3, and if so,
                  How many times with JobState TRUE (GOOD)
                  How many times with JobState FALSE (BAD)
            If the NumberRequested is greater than
                  QUEUED+GOOD, then return a 1 as (UHOH)
 
So, looking for a return like:
 
      MASTERID    NUMBERREQUESTED   QUEUED      GOOD  BAD   UHOH
      1           10                5           4     1     1
      2           10                10          0     0     0
      3           10                8           2     1     0
      4           10                6           0     4     1
      5           10                0           10    0     0
      6           10                0           5     5     1
 
This is what I tried:
 
SELECT      Table1.MasterID AS MasterID, 
            Table1.numberofcopies AS numberrequested,
            SUM(CASE WHEN TABLE3.jobstate=0 
                  AND TABLE3.MasterID=Table1.MasterID 
                  THEN 1 END) AS good,
            SUM(CASE WHEN Table3.jobstate=1 
                  AND Table3.MasterID=Table1.MasterID  
                  THEN 1 END) AS bad,
            SUM(CASE WHEN Table2.MasterID=Table1.MasterID 
                  THEN 1 END) AS queued,
            (CASE WHEN numberrequested > queued+good 
                  THEN 1 ELSE 0 END) AS uhoh
            FROM Table1, Table2, Table3
            GROUP BY Table1.MasterID;
 
 
Help please?
 
Thanks,
 
Mike
 

Reply via email to