2012-02-13 1 views
0

J'ai besoin de calculer le nombre total de jours consacrés à la résolution des billets pour le mois de Janvier 2012 pour chaque personnel technique et les lister dans un ordre croissant.problème simple SQLPLUS .. ma réponse est fausse

J'ai essayé de réécrire la question de le rendre plus clair d'abord si ici

Trouver toutes les technologies ppls pour les billets au mois de janvier 2012 et affiche le nombre total de jours passés sur chacun.

Heres ma tentative

select pplSoft, days_worked_on as pplWorkedOn 
from Tickets, Tech_personnel 
where date_submitted >= '01-JAN-2012' AND date_submitted <= '31-JAN-2012' 
group by pplSoft having pplWorkedOn = 
    (select days_worked_on WHERE date_submitted >= '01-JAN-2012' 
    AND date_submitted <= '31-JAN-2012'); 

Ce qui est faux .. aide est appréciée!

TECH PERSONNEL (pplSoft, fname, lname, pittID, expertise, office phone) where fname is first name, and lname is last name. 

USERS (pplSoft, fname, lname, pittID, office phone) 

CATEGORIES (category id, category, description) where this table lists all possible categories of submitted tickets. 

INVENTORY(machine name, IP, network port, MACADDR, location id) 

LOCATIONS(location id, location, building, notes) 

TICKETS (ticket number, owner pplSoft, date submitted, date closed, days worked on, category id, machine name, location, description) 

ASSIGNMENT (ticket number, tech pplSoft, date assigned, status) where status held is an enumeration, could be: assigned, in progress, delegated, closed successful, or closed unsuccessful. 

Répondre

0
SELECT owner_pplSoft, SUM(days_worked_on) AS sum_days_worked_on 
FROM Tickets 
WHERE date_submitted >= '01-JAN-2012' AND date_submitted <= '31-JAN-2012' 
GROUP BY owner_pplSoft 
ORDER BY SUM(days_worked_on) 
0

Si je comprends bien le schéma ...

SELECT PPLSOFT, SUM(DAYS_WORKED_ON) 
FROM TECH_PERSONNEL, TICKETS 
WHERE TECH_PERSONNEL.PPLSOFT = TICKETS.OWNER 
AND DATE_SUBMITTED >= TO_DATE('1/1/2012', 'DD/MM/YHYYY') 
AND DATE_SUBMITTED <= TO_DATE('31/1/2012', 'DD/MM/YYYY') 
GROUP BY PPLSOFT 
ORDER BY PPLSOFT 

ou

ORDER BY SUM(DAYS_WORKED_ON) DESC 

selon que vous voulez

0

J'espère que celui-ci est droite:

select pplSoft, sum(TO_CHAR(todays_worked_on,'mm-dd-yyyy')) 
from Tickets tc, Tech_personnel tp 
where tp.pplSoft=tc.pplSoft 
and (date_submitted between TO_DATE('01-01-2012','mm-dd-yyyy') 
and TO_DATE('01-31-2012','mm-dd-yyyy')) 
group by pplSoft,TO_CHAR(todays_worked_on,'mm-dd-yyyy') 
0
SELECT owner_pplSoft as pplSoft, SUM(days_worked_on) AS pplWorkedOn 
FROM tickets 
WHERE date_submitted >= to_date('01-JAN-2012', 'dd-mon-yyyy') 
    AND date_submitted <= to_date('31-JAN-2012', 'dd-mon-yyyy') 
GROUP BY owner_pplSoft 
ORDER BY SUM(days_worked_on) 
0

La colonne PPLSOFT sur les billets est le propriétaire, et non la personne qui travaille sur le billet. Pour obtenir le personnel technique dont vous avez besoin d'inclure des affectations dans le mélange.

select tech.pplSoft 
     , sum(tic.days_worked_on) as pplWorkedOn 
from Tickets tic 
     join assignments ass on (ass.ticket = tic.ticket) 
     join Tech_personnel tech on (ass.pplSoft = tech.pplSoft) 
where ass.date_submitted >= to_date('01-JAN-2012') 
and ass.date_submitted <= to_date('31-JAN-2012') 
group by tech.pplSoft 

Maintenant, cela ne vous donnera probablement toujours pas la réponse que vous voulez. Ceci est dû à des failles dans votre modèle de données.

La colonne DAYS_WORKED_ON est conservée au niveau TICKET, donc si deux personnes travaillaient sur le ticket, le nombre de jours serait compté deux fois. De plus, les jours travaillés tout au long du mois de janvier pour un billet amassé le 31-DEC-2011 ne seraient pas comptabilisés. Pour obtenir un chiffre précis, vous devez suivre les jours où chaque personne travaille sur un billet.

Bien que la colonne ASSIGNMENTS.STATUS semble contenir des statuts relatifs au BILLET. Je ne sais pas si c'est un autre problème avec votre modèle ou une indication que je n'ai pas compris l'objectif réel des affectations.

+0

Vous utilisez une conversion de date implicite dans votre clause where. Vous devriez utiliser les fonctions to_date. –

+0

@MikeMcAllister - en fait, je viens de couper le code de l'OP. Normalement, je ne change que ce qui est pertinent pour la question en cours. Mais je suis d'accord que ne pas utiliser une fonction de date pourrait créer des problèmes. – APC

+0

J'ai envisagé de faire un commentaire sur la question du PO, mais j'ai pensé que cela serait trompeur, car le problème principal était ailleurs. –