删除 Group By 中的重复值

Removing Duplicate Values within Group By

我在 Microsoft Visual Studio 2010 中使用 SQL-Server 2012。

作为序言,我不能使用 ROW_NUMBER() OVER(PARTITION BY Col),因为我使用的 Visual Studio 版本不支持 OVER() 方法。不幸的是,我不在可以获取新软件的地方。

我有一组部门和工作 ID 如下:

SELECT 
   Department, 
   Job_ID
FROM 
   Table1 
JOIN Table2 on 
Table1.id = Table2.id


Department       Job_ID
__________________________

 Marketing         J3
 Engineering       J1
 Marketing         J2
 Recruiting        J2
 Marketing         J8
 Administration    J3
 Recruiting        J1
 Administration    J5
 Administration    J1

我正在尝试按 Job_ID 进行分组,显示与每个 Job_ID 关联的不同部门,并​​且只包括具有 2 个以上部门的组。最终结果将是:

Department       Job_ID
__________________________

 Administration    J1
 Recruiting        J1
 Engineering       J1
 Marketing         J2
 Recruiting        J2
 Marketing         J3
 Administration    J3

我试过:

SELECT Job_ID, count(distinct(Department)) as Dept_CountD
FROM Table1 JOIN Table2 on Table1.id=Table2.id
GROUP BY Job_ID
HAVING count(distinct(Department)) >1

这可行,但是,它不会将部门与每个 ID 一起分组。我也知道(并且已经测试过)我不能将 Department 插入 Group By 语句中,因为那样 return 不同的部门计数只等于 1!

我已经尝试将上述语句构建到 CTE 中并在 Job_ID 上进行内部连接,所以我只有 Job_IDs 有超过 2 个不同的部门与之关联,但是,我结束了加入分组中的重复部门。

我在想也许加入子查询或进行半联接?

使用COUNT() Over() window聚合

select * from 
(
select count(1)over(partition by Job_ID) as cnt,*
From <<join>>
) A
Where cnt > 1

这个怎么样:

SELECT 
   Department, 
   Job_ID
FROM Table1 
JOIN Table2 on Table1.id = Table2.id
WHERE Job_ID IN (SELECT Job_ID
                 FROM Table1 JOIN Table2 on Table1.id=Table2.id
                 GROUP BY Job_ID
                 HAVING count(distinct(Department)) >1)

试试这个:(我只是猜测哪个 table 有部门,哪个有工作,因为你没有提供架构。

  SELECT Job_ID, count(*) Dept_CountD
  FROM Table1 a JOIN Table2 b on a.id=b.id
  where (Select count(*) from table1
         Where JobId = a.JobId) > 1