我正在使用查询来查询员工每周一周的总工作时间。我在选择范围内使用选择范围将周分为几列。我正在为某些员工收到Null。如何删除Nulls
select distinct
EM.EMPLOYEE,
RTRIM(LTRIM(LAST_NAME))+', '+RTRIM(LTRIM(FIRST_NAME)) as [FULL NAME],
(Select SUM(ISNULL(HOURS,'0')) from TimeTbl PT2 WHERE DATEPART(WK, Date) = DATEPART(WK, DATEADD(WK, -1, getdate())) and PAYROLL_YEAR='2020'and PT2.EMPLOYEE=PT.EMPLOYEE) AS [WEEK 1 HOURS],
(Select SUM(ISNULL(HOURS,'0')) from TimeTbl PT2 WHERE DATEPART(WK, Date) = DATEPART(WK, DATEADD(WK, -2, getdate())) and PAYROLL_YEAR='2020'and PT2.EMPLOYEE=PT.EMPLOYEE) AS [WEEK 2 HOURS],
(Select SUM(ISNULL(HOURS,'0')) from TimeTbl PT2 WHERE DATEPART(WK, Date) = DATEPART(WK, DATEADD(WK, -3, getdate())) and PAYROLL_YEAR='2020'and PT2.EMPLOYEE=PT.EMPLOYEE) AS [WEEK 3 HOURS],
(Select SUM(ISNULL(HOURS,'0')) from TimeTbl PT2 WHERE DATEPART(WK, Date) = DATEPART(WK, DATEADD(WK, -4, getdate())) and PAYROLL_YEAR='2020' and PT2.EMPLOYEE=PT.EMPLOYEE)AS [WEEK 4 HOURS],
(Select SUM(ISNULL(HOURS,'0')) from TimeTbl PT2 WHERE DATEPART(WK, TR_DATE) = DATEPART(WK, DATEADD(WK, -5, getdate())) and PAYROLL_YEAR='2020' and PT2.EMPLOYEE=PT.EMPLOYEE)AS [WEEK 5 HOURS]
From TimeTbl PT
right join EMPLYTBL EM on PT.EMPLOYEE=EM.EMPLOYEE
答案 0 :(得分:0)
使用条件聚合:
SELECT EM.EMPLOYEE, RTRIM(LTRIM(LAST_NAME))+', '+RTRIM(LTRIM(FIRST_NAME)) as [FULL NAME],
SUM(CASE WHEN DATEPART(WK, Date) = DATEPART(WK, DATEADD(WK, -1, getdate())) and PAYROLL_YEAR = 2020) THEN HOURS END) AS [WEEK 1 HOURS],
SUM(CASE WHEN DATEPART(WK, Date) = DATEPART(WK, DATEADD(WK, -2, getdate())) and PAYROLL_YEAR = 2020) THEN HOURS END) AS [WEEK 2 HOURS],
. . .
From EMPLYTBL EM left join
TimeTbl PT
ON PT.EMPLOYEE = E.EMPLOYEE
GROUP BY EM.EMPLOYEE, RTRIM(LTRIM(LAST_NAME))+', '+RTRIM(LTRIM(FIRST_NAME))