选择包含相关数据的不同行

时间:2014-09-05 21:52:32

标签: sql sql-server-2005

我在表UserMgr中有以下数据。

ID  |  UserID  |  MgrDbID  |  DeptID
1   |  111     |  2        |  1
2   |  112     |  NULL     |  1
3   |  113     |  5        |  1
4   |  113     |  6        |  2
5   |  114     |  NULL     |  1
6   |  114     |  NULL     |  2
7   |  115     |  5        |  1
8   |  115     |  6        |  2
9   |  116     |  10       |  1
10  |  117     |  NULL     |  1

包括经理在内的所有用户都出现在上表中。 MgrDbID指的是ID列。用户可能有多个记录,在这种情况下会有 由DeptID为相应管理器的多个记录。对于Managers,MgrDbID为NULL。

我需要结果集如下,其中包含相应MgrDbID的不同UserID和UserID,如下所示(对于非管理者的用户)。任何人都可以请求帮助查询以下内容。

UserID  |  MgrID
111     |  112
113     |  114
115     |  114
116     |  117 

2 个答案:

答案 0 :(得分:2)

select u1.userid, min(u2.userid) as MgrID
from UserMgr u1
join UserMgr u2 on u1.UserMgrID = u2.ID
group by u1.userid

答案 1 :(得分:0)

以上并未返回预期结果。以下对我有用。

SELECT u1.userID, u2.UserID
FROM users u1 INNER JOIN users u2 ON u1.MgrDbID = u2.ID
GROUP BY u1.userID, u2.UserID