[英]How to sum of 2 rows based on condition in SQL Server 2008
如何用求和合并两行到单行?
这就是现在所得到的...
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
我没有尝试过
这个想法只是保持当前结果LeaveTypeFName
,只需从LeaveTypeFName
删除“ P-
”,然后再次按结果分组即可。 希望这项工作!
;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
使用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.