我试图总结alias
列。我的英语不好,所以我会列出我想做的事情。
08:00 hours
,他将获得RO
(可以多次)现在,我能够通过员工一天的额外时间来显示结果。
这是我的查询
select
a.Nip, b.FullName, c.attendancedate, c.inTime, c.OutTime,
DATEPART(wk, c.attendanceDate) week,
case
when DATEADD(HOUR, -8, OutTime) <= InTime then '00:00'
else CONVERT(VARCHAR(5),DATEADD(HOUR, -8, OutTime - InTime), 108)
end AS total
from
DinasHoDetail a
left join
Employee b on a.Nip = b.Nip
left join
DinasHoHeader d on a.KodeDinasHeader = d.KodeDinasHeader
left join
attendance c on a.Nip = c.Nip and attendancedate between d.startdate and d.enddate
这是结果
因此,在使用ro
进行总调用后,我还可以再添加一列。 ro将包含total/8 hours group by week & Nip
从第36周开始,Nip 1502427就是一个例子
02:00 + 02:00 + 02:00 / 8 hours
抱歉我的英语不好。
我真的想在Fiddle
创建我的表格。每次运行查询时,我总是会收到错误
答案 0 :(得分:2)
使用CTE,您可以通过多种方式返回查询:
with BaseQuery as
(
select a.Nip,b.FullName,c.attendancedate,c.inTime,c.OutTime,DATEPART( wk, c.attendanceDate) week,
case
when DATEADD(HOUR, -8, OutTime) <=InTime then 0
else DATEDIFF(HOUR, InTime, OutTime) - 8
end AS total
from DinasHoDetail a
left join Employee b on a.Nip = b.Nip
left join DinasHoHeader d on a.KodeDinasHeader = d.KodeDinasHeader
left join attendance c on a.Nip =c.Nip and attendancedate
between d.startdate and d.enddate
)
select B1.Nip, B1.FullName, B1.AttendanceDate, B1.InTime, B1.OutTime, B1.Week, B1.Total, B2.RO
from BaseQuery B1
inner join
(
select Nip, Week, sum(Total)/8 as RO
from BaseQuery
group by Nip, Week
) B2
on B2.Week = B1.Week
and B2.Nip = B1.Nip
答案 1 :(得分:2)
GROUP BY和日期函数计算每个Nip和工作日的RO
select a.Nip,b.FullName,DATEPART( wk, c.attendanceDate) week,
sum(case
when DATEADD(HOUR, -8, OutTime) <=InTime then 0
else DATEDIFF(HOUR, InTime, OutTime) - 8
end)/8 AS RO
from DinasHoDetail a
left join Employee b on a.Nip = b.Nip
left join DinasHoHeader d on a.KodeDinasHeader = d.KodeDinasHeader
left join attendance c on a.Nip =c.Nip and attendancedate
between d.startdate and d.enddate
group by a.Nip,b.FullName,DATEPART( wk, c.attendanceDate)