2011-06-24 9 views
0

Enseigner moi-même SQL, et en utilisant un employé info db, sur oracle 11g.sql d'auto-apprentissage, regroupement des résultats erreur

Je suis en train de retourner le nombre total d'heures et de jours travaillés par un employé à chacun des « bureaux »

Cependant, les « heures de travail » renvoie l'heure de chaque employé décalent, mais lignes individuelles, au lieu d'avoir une ligne avec le nombre total de jours et le nombre total d'heures. (Cela signifie que chaque ligne a un nombre de jours = 1)

SELECT L.OFFICE_NAME as "Shop", 
(us.LAST_NAME || ' , ' || us.FIRST_NAME) AS "Employee Name", 
COUNT(distinct shift.shift_date) as "WORK DAYS", 
round((shift2.MaxSignOffTime-shift.MinSignOnTime)*24, 1) AS "WORK HOURS", 

FROM 
LOCAL_OFFICE L 
JOIN 
    Orders ord 
    ON L.LOCAL_OFFICE_ID = ord.LOCAL_OFFICE_ID 
JOIN 
    USERS us 
    ON 
    us.USER_ID = ord.ASSIGNED_TO_USER_ID 
join 
    (SELECT min(act_sign_dt) as MinSignOnTime, USER_ID, shift_token 
FROM CLIENT_SIGN 
WHERE 
    BEG_OF_SHIFT = 'Y' 
GROUP BY shift_date, user_id, shift_token) shift on shift. user_id = ord.assigned_to_user_id 
join 
    (SELECT max(act_sign_dt) as MaxSignOffTime, USER_ID, shift_token 
FROM CLIENT_SIGN 
WHERE 
    end_OF_SHIFT = 'Y' 
GROUP BY shift_date, user_id, shift_token) shift2 on shift2.shift_token = shift.shift_token 

GROUP BY OFFICE_NAME, LAST_NAME, FIRST_NAME,shift.shift_date, (shift2.MaxSignOffTime-shift.MinSignOnTime) 
ORDER BY OFFICE_NAME, "Employee Name" 

Je suis prêt à répondre à toutes les questions nécessaires, mais je ne peux pas voir pourquoi il est groupait pas en une ligne pour chaque employé pour chaque emplacement de bureau

+3

peut pas vous faire un test plus simple? C'est aussi une bonne pratique pour apprendre à abstraire/simplifier un problème (Moi au moins n'ai pas d'énergie pour apprendre toute cette longue requête ...) –

Répondre

2

Try this ...

Mettre une somme() autour de ce dans le SELECT:

round((shift2.MaxSignOffTime-shift.MinSignOnTime)*24, 1) 

et supprimer ce:

(shift2.MaxSignOffTime-shift.MinSignOnTime) 

de la clause GROUP BY

+0

Oh wow c'était ça. Merci beaucoup d'avoir pris le temps de lire tout ça. – zomgcopters

Questions connexes