我有一个名为tblLineage的表,它包含两列,如下所示
| USERID | REPORTING PATH |
----------------------------------------------
| LB123 | AD324/RB567/LB123 |
| KS654 | AD324/RB567/LB123/KS654 |
| RG110 | AD324/RB567/LB123/KS654/RG110 |
报告路径显示每个员工直属经理的用户ID,直至导演
我试图通过计算报告路径的人的长度与包含该用户ID的任何报告路径的最大长度之间的差异来查找向每个人报告的级别数
e.g。在上表中,用户LB123具有Len([报告路径])= 17 并且包含其userID的任何报告路径的最大长度为29(12的差异)。然后我可以推断他有两个级别向他报告(因为用户ID加上前面的斜杠是6个字符)。
我正在尝试编写一个sql查询,它将为每个用户提供最高报告级别
我尝试过做这样的事情......
SELECT
t1.userID,
Len(t1.[Reporting Path) AS LenPath,
Max(Len(t2.[Reporting Path])) as MaxPath,
(MaxPath- LenPath)/6 as Rank
FROM
tblLineage t1 INNER JOIN tblLineage t2 ON t1.userID like "*" & t2.[Reporting Path] & "*"
GROUP BY
t1.userID, t1.[Reporting Path]
但它没有返回任何结果。任何人都可以看到我出错的地方(或建议更好的方法)?
答案 0 :(得分:1)
您的JOIN
条件是向后的。尝试:
FROM tblLineage t1 INNER JOIN
tblLineage t2
ON t2.[Reporting Path] like "*" & t1.userID & "*"