2017-02-03 6 views
2

Я использую SQL-Server 2012 в Microsoft Visual Studio 2010.Удаление повторяющихся значений в группе К

В предисловии, я не могу использовать ROW_NUMBER() OVER(PARTITION BY Col) как метод OVER() не поддерживается Visual Studio версии я использую. К сожалению, я не в месте, где могу получить новое программное обеспечение.

У меня есть группа идентификаторов отделов и рабочих мест, что:

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. Я также знаю (и тестировал), что я не могу вставить Департамент в оператор Group By, так как это приведет к возврату отдельных показателей отдела только в 1!

Я попытался построить вышеуказанное утверждение в CTE и внутреннее присоединение к Job_ID, поэтому у меня есть только Job_ID, у которых есть более чем два различных отдела, связанных с ними, однако в итоге я получаю дубликаты департаментов в группировке из объединения ,

Я думаю, что, возможно, присоединяюсь к второму запросу или выполнению полуфинала?

+1

Что такое ожидаемый выход? – GurV

+1

Что вы подразумеваете под " Я не могу использовать «ROW_NUMBER() OVER (PARTITION BY)», поскольку метод «OVER()» не поддерживается версией Visual Studio, которую я использую »? Именно версия SQL Server определяет, какие скрипты работают, а какие нет, а SQL Server 2012 поддерживает предложение «OVER». – iamdave

+1

Что такое «полуприцеп»? –

ответ

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) 
+0

Да @Tim, мы можем сделать это с помощью 'JOIN'. –

+0

Я думаю, что это то, что я искал (и формулировал в моей голове после того, как я отказался от проблемы прошлой ночью после 2 часов ударов головой по клавиатуре). Я вообще был испорчен CTE и имею слабую интуицию с подзапросами. – Sean

+0

@Holmes Рад, что я смог помочь. –

1

Используйте COUNT() Over() окно агрегатный

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

попробовать это: (я только гадать, какая таблица имеет Департаменты и который имеет Jobs потому что вы не предоставили схему .

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