如何使用sum将两行合并为单行?
这就是我现在要做的......
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
但我的预期输出是
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
这是我的SQL查询
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
这是我的LeaveEntries表
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
答案 0 :(得分:1)
我没试过这个,
这个想法只是将您当前的结果保持原样,只需从P-
&中删除“LeaveTypeFName
”即可。然后再按结果分组。希望这项工作!
;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
答案 1 :(得分:0)
使用Case Statement
执行此操作。
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