SQL员工为承包商工作

时间:2015-01-01 21:31:24

标签: sql sql-server

你好,我有一个数据库,我需要回答一个问题,即一些员工是否为多个承包商工作。我相信所有这些信息都在一张表中。

  • contract(contractor_no FK,emp_no FK,job_no FK,is_active)

可能涉及的其他表格

  • cont_employee(emp_no PK,emp_fname,emp_lname,birth_date)
  • contractor(contractor_no PK,contractor_name)

2 个答案:

答案 0 :(得分:2)

由员工分组并仅选择具有多个记录的那些

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

答案 1 :(得分:0)

以上查询使用group by on varchar列并使用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