самообучающийся sql, ошибка группировки результатов - PullRequest
0 голосов
/ 24 июня 2011

Обучение самому SQL и использование базы данных info сотрудника на oracle 11g.

Я пытаюсь вернуть общее количество часов и дней, отработанных сотрудником в каждом из "офисов"

Однако «рабочие часы» возвращают правильное время каждой смены сотрудников, но в виде отдельных строк вместо одной строки с общим числом дней и общим количеством часов.(Это означает, что в каждой строке есть количество дней = 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"

Я готов ответить на любые необходимые вопросы, но я просто не могу понять, почему он не группируется в один ряд для каждого сотрудника для каждого офисаместо

1 Ответ

2 голосов
/ 24 июня 2011

Попробуйте это ...

Поместите сумму () вокруг этого в SELECT:

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

и удалите это:

(shift2.MaxSignOffTime-shift.MinSignOnTime)

из ГРУППЫBY BY

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...