我的原始数据集看起来与下面提到的示例数据集非常相似:
| 身份证|姓名|乡村|系|
| - ------|- ------|- ------|- ------|
| 1个|罗恩|美国|人力资源|
| 第二章|约翰|美国|人力资源|
| 第二章|约翰|美国|信息技术|
| 第二章|约翰|美国|信息技术|
| 三个|凯利|美国|信息技术|
| 三个|凯利|美国|信息技术|
| 四个|戴夫|美国|销售额|
| 四个|戴夫|美国|信息技术|
| 四个|戴夫|美国|信息技术|
| 四个|戴夫|美国|市场营销|
| 五个|诺拉|美国|信息技术|
我想显示那些只在IT部门工作过的雇员的姓名。例如,John在HR和IT部门都工作过,所以我想从输出中排除他的姓名。在SQL Server中应该采用什么方法?
基于上面的例子,我的输出应该类似于下表:
| 身份证|姓名|乡村|系|
| - ------|- ------|- ------|- ------|
| 三个|凯利|美国|信息技术|
| 三个|凯利|美国|信息技术|
| 五个|诺拉|美国|信息技术|
4条答案
按热度按时间6bc51xsx1#
有几种方法,一种是使用
not exists
另一种方法是使用聚合窗口函数:
w6mmgewl2#
您可以使用
group by
对相同名称进行分组,并将每个部门行与min
和max
进行比较,以检查它是否只有一个部门,如下所示。您可以通过添加另一个条件(
min
用于部门,因为它在having语句中)来过滤IT部门,如下所示。并且可以通过在子查询中使用它来获取所有未分组的行,如下所示。
演示:https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=add8a5278770cf889a0e898fce6ad9a7
2g32fytz3#
试试这个:
根据您的需要工作,在MySQL和SQL Server中测试。
cx6n0qe34#
你可以选择条件分组。