删除 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
我在 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