[英]Sum and Inner Join with Group by in Sql Server
請幫助我獲得預期的輸出。 我有2張桌子
1.離開條目
emp_id LeaveTypeSName LeaveStatus FromDate ToDate
----------------------------------------------------------------------
1 CL Full Day 21/07/2014 21/07/2014
1 SL Half Day 21/07/2014 21/07/2014
1 CL Full Day 21/07/2014 21/07/2014
1 SL Full Day 21/07/2014 21/07/2014
1 CL Half Day 21/07/2014 21/07/2014
1 CL Full Day 21/07/2014 24/07/2014
2,2014年員工假期
emp_id leaveTypesName allowedLeaves
-------------------------------------------
1 CL 12
1 SL 6
1 FH 5
1 EL 12
1 PL 6
這是我的查詢
SELECT
c.LeaveTypeSName
,a.AllowedLeaves
,SUM(case when LeaveStatus='FullDay' then DATEDIFF(day, FromDate, ToDate)+1 else 0.5 end) AS 'leavetaken'
FROM EmployeeLeaves2014 a
INNER JOIN LeaveEntries b ON a.Emp_Id = b.Emp_Id
WHERE b.emp_id = '1'
GROUP BY LeaveTypeSName,AllowedLeaves
預期產量:
LeaveTypeSName allowedLeaves leaveTaken
-------------------------------------------
CL 12 6.5
SL 6 1.5
FH 5 0
EL 12 0
PL 6 0
請試試:
select
emp_id,
leaveTypesName,
allowedLeaves,
ISNULL((select SUM(datediff(d, FromDate, ToDate)+
(case when LeaveStatus='Half Day' then .5 else 1 end))
from LeaveEntries b where b.emp_id=a.emp_id and b.LeaveTypeSName=a.leaveTypesName), 0) as LeavesTaken
from EmployeeLeaves2014 a
使用開窗功能的另一種方法:
select distinct
b.leavetypesname,
b.allowedleaves,
coalesce
(sum(datediff(day,fromdate,todate)
+ case
when leavestatus = 'Full Day' then 1
else 0.5
end) over (partition by a.leavetypesname order by a.emp_id)
,0) as leaveTaken
from leaveentries a
right join employeeleaves2014 b
on a.emp_id = b.emp_id
and a.leavetypesname = b.leavetypesname
order by leaveTaken desc
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.