【发布时间】:2020-01-27 17:16:41
【问题描述】:
我有一个emp表如下:
userID varchar(10)
ManagerID varchar(10)
数据:
UserID ManagerID
101 102
103 102
104 103
我需要直接或间接找到某个经理下的所有用户。
输出应该如下:
如果是102:
Manager ReportingUsers
--------------------------
102 101,103
如果我们检查 104,输出应该是:
Manager ReportingUsers
--------------------------
104 102,101,103 `
我为此编写的查询如下
SELECT managerID, GROUP_CONCAT(userID) FROM emp GROUP BY managerID;
但是我得到的输出满足第一个输出而不是第二个:
+-----------+----------------------+
| MANAGERID | GROUP_CONCAT(USERID) |
+-----------+----------------------+
| 102 | 101,103 |
| 104 | 102 |
+-----------+----------------------+
如何使用游标和存储过程来实现这个用例,通过它我可以获得每个经理的输出?
只是更新 如果我使用下面的查询,我也会得到第二个示例的结果,但 102 的第一个示例不满意:
SELECT m.MANAGERID, GROUP_CONCAT(m.USERID,';',(Select Group_Concat(n.USERID) from emp as n where m.userID=n.managerID or n.managerID=NULL group by n.managerID)) as ReportingUsers FROM emp as m GROUP BY managerID;
如果我可以使用游标和过程获得解决方案,那也可以。
【问题讨论】:
-
GROUP_CONCAT不是sql-server函数。你的意思是MySQL?您能否使用正确的标签更新您的问题? -
抱歉。我是 SQL 新手。如果您也可以为此提供一个 sql-server 查询,我将不胜感激。
-
也许这个帖子可以帮助你Mysql-hierarchical-recursive-query。