我有一个问题,因为我不太擅长查询。
我有一个查询,包含两个选择查询的联合:
SELECT em.emp_code,
em.emp_name,
COALESCE(SUM(pe.hours_allotted),0) AS hours,
pe.dated
FROM employee_master em
LEFT JOIN project_employee pe ON (pe.Emp_code = em.emp_code)
WHERE (dated >= '2011-03-14'
AND dated < '2011-03-20' )
OR dated IS NULL
GROUP BY em.emp_code
UNION
(SELECT em.emp_code,
em.emp_name,
'0' AS hours,
pe.dated
FROM employee_master em
LEFT JOIN project_employee pe ON (pe.Emp_code = em.emp_code)
WHERE (dated >= '2011-03-14'
AND dated < '2011-03-20' )
OR dated IS NOT NULL
GROUP BY em.Emp_code)
ORDER BY emp_name;
现在,结果集返回的示例如下:
ecode ename hours
----------------------
201 Alak basu 10
201 alak basu 0
第一个结果来自于联合查询中第一个select语句,其中hours = 10,而hours = 0则来自于联合查询中第二个select语句。
我的要求是:
ecode ename hours
----------------------------
201 alak basu 10
比如说,对于每个ecode应该只有一个结果。如何对它进行分组,例如按ecode分组汇总工作时间,以便只返回如上所示的一个结果?
NULL
),COALESCE
将把它转换为零。由于您正在执行LEFT JOIN
,每个员工都将被表示,如果他们没有匹配的project_employees
行,则他们的工时将为NULL
。因此,再次强调,UNION
的第二部分没有任何作用。请参见我的答案以获取 SQL 应该如何更新的更新。 - jdmichal