2009-10-30 2 views
0

У меня есть таблица, как показано нижеSQL Query Проблема

Q_ID DeptID EmployeeName City 
100 100  testest  abcd 
100 101   tata  cdd 

с 100K записей. Мне нужен запрос, который должен извлекать все записи с тем же Q_ID, но с другим DEPTID.

Пожалуйста, помогите.

Благодаря

+0

Так что, глядя на это, вы хотите, чтобы только 1 сотрудник за отдел вернулся? И можем ли мы предположить, что между Q_ID и DeptID нет никакой связи? –

+0

Вы ищете записи, где Q_ID относится к определенному DeptID? Как все записи, где Q_ID равно 100, а DeptID равно 101? – ChadNC

ответ

5

вступите к себе:

SELECT t1.*, t2.DeptID 
FROM [MyTable] t1 
INNER JOIN [MyTable] t2 ON t2.Q_ID=t1.Q_ID AND t2.DeptID>t1.DeptID 
+0

Должно ли '<>' быть '>' или '<', чтобы избежать повторного перечисления каждой пары дважды? –

0

Вы также можете сделать это с помощью аналитических функций и таким образом избежать объединения. В большем количестве ситуаций это будет более эффективным, но это зависит от фактических данных и индексации.

with TRanked as (
    select 
    QID, 
    DeptID, 
    EmployeeName, 
    City, 
    dense_rank() over (
     partition by CustomerID 
     order by EmployeeID 
    ) as ct 
    from T 
), TMaxRk as (
    select 
    QID, 
    DeptID, 
    EmployeeName, 
    City, 
    max(ct) over (partition by CustomerID) as maxRk 
    from TRanked 
) 
    select 
    QID, 
    DeptID, 
    EmployeeName, 
    City 
    from TMaxRk 
    where maxRk > 1;