这里对于'CF061W'部分是25,我将选择其fparinum值为25的记录现在我将获得这些部件FA061W,HRD20600和SD1201。现在我将再次选择其fparinum值为上述检索部件FA061W,HRD20600和SD1201等的记录。这应该持续到最高水平(flevel),对于上表,它达到4级。
现在我想要单个sql查询,它将检索父部件'CF061W'的所有记录。
提前致谢
Pradeep
答案 0 :(得分:1)
我可能有连接条件列:INNER JOIN PartHierarchy ph ON n.finum = ph.fparinum
错误的方法(不熟悉您的架构)。
WITH PartHierarchy (finum, part, fparinum , dsono, flevel) AS
(
-- Base case
SELECT
finum,
part,
fparinum,
dsono,
1 as flevel
FROM myTablename
WHERE fparinum = 0
UNION ALL
-- Recursive step
SELECT
n.finum,
n.part,
n.fparinum,
n.dsono,
ph.flevel + 1 AS flevel
FROM myTablename n
INNER JOIN PartHierarchy ph ON n.finum = ph.fparinum
)
SELECT *
FROM PartHierarchy
ORDER BY flevel
这是一个经典的递归CTE(Common Table Expression)
答案 1 :(得分:1)
这对你有用
WITH TAB_CTE AS (
SELECT finum, part, fparinum, flevel
FROM TABTEST
WHERE PART='CF061W'
UNION ALL
SELECT e.finum, e.part, e.fparinum, e.flevel
FROM TABTEST e
INNER JOIN TAB_CTE ecte ON ecte.finum = e.fparinum
)
SELECT *
FROM TAB_CTE
输出
finum part fparinum flevel
25 CF061W 0 1
26 FA061w 25 2
27 hrd20600 25 2
35 sd1201 25 2
28 f1024 27 3
答案 2 :(得分:0)
这几乎是何时使用递归CTE的教科书示例。
有很多文章详细说明了该怎么做。例如。在MSDN上这个: http://msdn.microsoft.com/en-us/library/ms186243.aspx