How to merge two rows to single row with sum?
This is what am getting now...
LeaveTypeId LeaveTypeFName day
---------------------------------------
1 Casual Leave 9.0
3 SickLeave 3.0
10 Festival 4.0
11 LOP 15.0
14 National Holiday 4.0
18 P-SickLeave 1.0
19 P-Casual Leave 3.0
but my expected output is
LeaveTypeId LeaveTypeFName day
--------------------------------------------
1 Casual Leave(All) 12.0
3 SickLeave(All) 4.0
10 Festival 4.0
11 LOP 15.0
14 National Holiday 4.0
This is my SQL query
select
b.LeaveTypeId,LeaveTypeFName,
SUM(case when LeaveStatus = 'FullDay'
then DATEDIFF(day, FromDate, ToDate) + 1
else 0.5
end) as 'day'
from
LeaveEntries a
join
LeaveTypes b on a.LeaveTypeId = b.LeaveTypeId
where
EmployeeId = '3862'
group by
LeaveTypeFName, b.LeaveTypeId
this is my LeaveEntries Table
LeaveEntryId LeaveTypeId LeaveStatus EmployeeId FromDate ToDate
19 3 FullDay 3484 2013-02-06 2013-02-09
21 1 HalfDay 3484 2013-03-07 2013-03-07
I haven't tried this,
the idea is just to take your current result as it is, just remove ' P-
' from LeaveTypeFName
& then again group by result. Hope this work!
;With CTE as
(
select
b.LeaveTypeId
,Case When b.LeaveTypeId in(18,19)
Then Replace(LeaveTypeFName,'P-','')
Else LeaveTypeFName
End as LeaveTypeFName
,SUM(case when LeaveStatus = 'FullDay'
Then DATEDIFF(day, FromDate, ToDate) + 1
Else 0.5
end) as 'day'
from LeaveEntries a
join LeaveTypes b on a.LeaveTypeId = b.LeaveTypeId
where EmployeeId = '3862'
group by LeaveTypeFName, b.LeaveTypeId
)
Select max(LeaveTypeId) as LeaveTypeId
,LeaveTypeFName
,Sum(day)
from CTE
group by LeaveTypeFName
Use Case Statement
to do this.
SELECT CASE
WHEN LeaveTypeFName LIKE '%Casual Leave%' THEN 'Casual Leave(All)'
WHEN LeaveTypeFName LIKE '%SickLeave%' THEN 'SickLeave (All)'
WHEN LeaveTypeFName LIKE '%Festival%' THEN 'Festival'
WHEN LeaveTypeFName LIKE '%LOP%' THEN 'LOP'
WHEN LeaveTypeFName LIKE '%National Holiday%' THEN 'National Holiday'
END LeaveTypeFName,
Sum([day]) [day]
FROM result
GROUP BY CASE
WHEN LeaveTypeFName LIKE '%Casual Leave%' THEN 'Casual Leave(All)'
WHEN LeaveTypeFName LIKE '%SickLeave%' THEN 'SickLeave (All)'
WHEN LeaveTypeFName LIKE '%Festival%' THEN 'Festival'
WHEN LeaveTypeFName LIKE '%LOP%' THEN 'LOP'
WHEN LeaveTypeFName LIKE '%National Holiday%' THEN 'National Holiday'
END
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.