繁体   English   中英

如何根据SQL Server 2008中的条件对两行求和

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM