2013-11-08 2 views
1

У меня есть следующие таблицы -Повторяющиеся записи тянет из SQL 2008 запросов

**TimeLogs** 
ID 
UserID 
JobID 
TimeTaken 

**Jobs** 
ID 
EstimatedTime 
ActualTime 

**ClockInLogs** 
ID 
UserID 
ClockDateTimeIn 
ClockDateTimeOut 

Следующий запрос генерирует дублированные записи -

SELECT tl.JobID, TimeTaken as 'HoursSold', 
DATEDIFF(minute, ClockDateTimeIn, ClockDateTimeOut)/60 as Hours_Difference, 
DATEDIFF(second, ClockDateTimeIn, ClockDateTimeOut)/60 as Minutes_Difference 
from TimeLogs tl 
INNER JOIN Jobs j on tl.JobID = j.ID 
LEFT JOIN ClockInLogs cil on tl.UserID = cil.UserID 
where tl.UserID = 10000 and 
    ClockDateTimeIn BETWEEN DATEADD(wk, DATEDIFF(wk,0,'11/08/2013'), 0) AND 
    DATEADD(wk, DATEDIFF(wk,0,'11/08/2013'), 6) 
    group by tl.ID, tl.JobID, j.TotalEstimatedCharge, tl.TimeTaken, cil.ClockDateTimeIn, cil.ClockDateTimeOut 

Screenshot of duplicate records

То, что я хотел бы это сделать возвращает сумму HoursWorked, Hours_Difference и Minutes_Difference - без дублирования. Я не могу понять, откуда происходит дублирование. Есть идеи?

Благодаря

+1

Что вы пытаетесь суммировать эти значения? Просто JobID, или что? – Andrew

ответ

2

Вы должны суммировать часы и минуты вместо группирование ими:

Вы могли бы в конечном итоге с более чем 60 минут, делая это таким образом.

select 
    tl.JobID, 
    TimeTaken as 'HoursSold', 
    Sum(datediff(n, ClockDateTimeIn, ClockDateTimeOut)/60) Hours_Difference, 
    Sum(datediff(s, ClockDateTimeIn, ClockDateTimeOut)/60) Minutes_Difference 
from 
    TimeLogs tl 
     inner join 
    Jobs j 
     on tl.JobID = j.ID 
     left join 
    ClockInLogs cil 
     on tl.UserID = cil.UserID 
where 
    tl.UserID = 10000 and 
    ClockDateTimeIn between dateadd(wk, datediff(wk,0,'11/08/2013'), 0) and 
    dateadd(wk, datediff(wk,0,'11/08/2013'), 6) 
group by 
    tl.JobID, 
    tl.TimeTaken 
0

Трудно сказать наверняка, не видя данных, но я подозреваю, что вы группирование полей, которые должны быть суммированы вместо (TimeTaken, ClockDateTimeIn и ClockDateTimeOut):

SELECT tl.JobID, 
SUM(TimeTaken) as 'HoursSold', 
SUM(DATEDIFF(minute, ClockDateTimeIn, ClockDateTimeOut)/60) as Hours_Difference, 
SUM(DATEDIFF(second, ClockDateTimeIn, ClockDateTimeOut)/60) as Minutes_Difference 
from TimeLogs tl 
INNER JOIN Jobs j on tl.JobID = j.ID 
LEFT JOIN ClockInLogs cil on tl.UserID = cil.UserID 
where tl.UserID = 10000 and 
    ClockDateTimeIn BETWEEN DATEADD(wk, DATEDIFF(wk,0,'11/08/2013'), 0) AND 
    DATEADD(wk, DATEDIFF(wk,0,'11/08/2013'), 6) 
group by tl.JobID 

Обратите внимание, что я также удалила группу по полям не в выборе, потому что это создало бы появление дубликатов.

Смежные вопросы