繁体   English   中英

选择出现多次的记录

[英]Select records that appear more than once

我试图选择出现不止一次且属于特定部门和其他部门的记录。

到目前为止,我所拥有的查询是这样的:

SELECT employeeCode, employeeName
FROM
    Employees
WHERE
    Department <> 'Technology' 
    AND employeeCode IN (SELECT employeeCode 
            FROM Employees 
            GROUP BY employeeCode HAVING COUNT(*) > 1)

问题是我想选择属于技术部门的员工,但他们也参与其他部门。

因此,它们必须来自技术部门,但也可以来自家庭部门。 在数据库中,它可能类似于:

1  |  A1  |  Alex  |  Technology
2  |  A2  |  Thor  |  Household
3  |  A3  |  John  |  Cars
4  |  A3  |  John  |  Technology
5  |  A4  |  Kim   |  Technology
6  |  A4  |  Kim   |  Video Games

因此,基本上查询应该返回:

  A3  |  John  |  
  A4  |  Kim   | 

我认为这是我遗漏的一小部分,但是..关于如何对其进行过滤/分类以使其始终使用技术和其他部门的任何想法?

顺便说一句,我尝试搜索,但是找不到像我这样的问题。

如果您希望可以在技术部门其他部门工作的员工:

select e.employeeCode, e.employeeName
from employees e
group by e.employeeCode, e.employeeName
having sum(case when e.department = 'Technology' then 1 else 0 end) > 0 and
       count(*) > 1;

假定表中没有重复项。 如果可以重复,则使用count(distinct department) > 1而不是count(*) > 1

尝试这个:

SELECT E.employeeCode, E.employeeName
FROM Employees E
INNER JOIN (SELECT DISTINCT E1.employeeCode, E1.employeeName
            FROM Employees E 
            WHERE E.Department = 'Technology'
           ) AS A ON E.employeeCode = A.employeeCode AND E.employeeName = A.employeeName
GROUP BY E.employeeCode, E.employeeName 
HAVING COUNT(*) > 1;

您可以将EXISTS与关联的子查询结合使用,并在不同条件下连接到同一张表。

SELECT e1.employeeCode, e1.employeeName
FROM Employees e1
WHERE e1.Department = 'Technology' 
AND EXISTS (SELECT * FROM Employees e2 
            WHERE e1.employeeCode = e2.employeeCode 
            AND e2.Department <> 'Technology')

这将适合您的情况:

SELECT a.employeeCode, a.employeeName
FROM Employees a, Employees b
WHERE 
     a.Department = 'Technology'
     AND
     b.Department <> 'Technology'
     AND 
     a.employeeCode = b.employeeCode
     AND 
     a.employeeID <> b.employeeID

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM