2009-10-30 162 views
0

我有一個表,如下圖所示SQL查詢問題

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;