SQL 名为承包商工作的员工
SQL employees working for contractors
您好,我有一个数据库,我需要回答一个问题,是否某些员工为多个承包商工作。我相信所有这些信息都在一个 table.
中
contract
(contractor_no FK,emp_no FK, job_no FK, is_active)
可能涉及的其他table
cont_employee
(emp_no PK, emp_fname, emp_lname, birth_date)
contractor
(contractor_noPK,contractor_name)
按员工分组,select 仅对拥有多个记录的员工分组
select e.emp_no, e.emp_fname, e.emp_lname
from cont_employee e
join contract c on e.emp_no = c.emp_no
where c.is_active = 1
group by e.emp_no, e.emp_fname, e.emp_lname
having count(distinct c.contractor_no) > 1
以上查询在 varchar 列上使用 group by 并使用 distinct 。
你可以试试row_number。
像这样,
SELECT * FROM
(
select e.emp_no, e.emp_fname, e.emp_lname
,ROW_NUMBER()OVER(PARTITION BY emp_no
ORDER BY contractor_no) ROWNUM
from cont_employee e
join contract c on e.emp_no = c.emp_no
where c.is_active = 1
)T4
WHERE ROWNUM>1
您好,我有一个数据库,我需要回答一个问题,是否某些员工为多个承包商工作。我相信所有这些信息都在一个 table.
中contract
(contractor_no FK,emp_no FK, job_no FK, is_active)
可能涉及的其他table
cont_employee
(emp_no PK, emp_fname, emp_lname, birth_date)contractor
(contractor_noPK,contractor_name)
按员工分组,select 仅对拥有多个记录的员工分组
select e.emp_no, e.emp_fname, e.emp_lname
from cont_employee e
join contract c on e.emp_no = c.emp_no
where c.is_active = 1
group by e.emp_no, e.emp_fname, e.emp_lname
having count(distinct c.contractor_no) > 1
以上查询在 varchar 列上使用 group by 并使用 distinct 。 你可以试试row_number。 像这样,
SELECT * FROM
(
select e.emp_no, e.emp_fname, e.emp_lname
,ROW_NUMBER()OVER(PARTITION BY emp_no
ORDER BY contractor_no) ROWNUM
from cont_employee e
join contract c on e.emp_no = c.emp_no
where c.is_active = 1
)T4
WHERE ROWNUM>1