问题描述
SELECT
VP.PERSONNUM,VP.PAYCODENAME,VP.PAYCODEID,VP.TIMEINSECONDS,TI.ENTEREDONDTM,VP.APPLYDATE,VP.LABORLEVELNAME2,VP.LABORLEVELNAME4,VP.LABORLEVELNAME5,[enter image description here][1]
CONVERT(VARCHAR(10),VP.ADJUSTEDAPPLYDATE,23) ORIGINALDATE,CONVERT(VARCHAR(10),VP.PREVPAYPERIODSTART,23)PREVPAYPERIODSTAR,VP.PREVPAYPERIODEND,112)PREVPAYPERIODEND
FROM VP_TOTALS VP
JOIN TIMESHEETITEM TI
ON TI.EMPLOYEEID = VP.EMPLOYEEID AND TI.TIMESHEETITEMID = VP.TIMESHEETITEMID and TI.DELETEDSW <> '1'
WHERE VP.PAYCODETYPE <> 'G'
and VP.PERSONNUM='100419'
and vp.PAYCODEID in ('145','701')
AND APPLYDATE BETWEEN '2020-06-01' AND '2020-06-30'
Order by VP.PERSONNUM,VP.APPLYDATE
有2个支付代码Overtime(SWG)Regular(SWG)根据日期分别排在各个行中
示例-第一行人员人数= 100149,申请日期= 6/3/2020,支付代码= Overtime(SWG),Timeinseconds = 1800
第二行人员数字为100149,适用日期= 6/3/2020,支付代码常规(SWG),秒数= 1500。
2)我的主要要求是这两行应加在一起,并且通过加在一起仅显示1行。
即人员编号= 100149,应聘日期= 6/3/2020,付款代码= [加班(SWG)+常规(SWG)],秒= 2300] 1
解决方法
很难确定WHERE条件下的所有情况。根据笔记中的描述,我在想这样的事情。
[编辑]将PAYCODEID串联添加到GROUP BY子句
;with
overtime_cte as (select * from VP_TOTALS where PAYCODEID='Overtime(SWG)' and VP.PERSONNUM='100419'),regular_cte as (select * from VP_TOTALS where PAYCODEID='Regular(SWG)' and VP.PERSONNUM='100419')
select rc.PERSONNUM,rc.APPLYDATE,concat(rc.PAYCODEID,'+',oc.PAYCODEID) PAYCODEID,sum(rc.TIMEINSECONDS+oc.TIMEINSECONDS)
from regular_cte rc
join
overtime_cte oc on rc.PERSONNUM=oc.PERSONNUM
and rc.APPLYDATE=oc.APPLYDATE
group by rc.PERSONNUM,oc.PAYCODEID);