SQL Server 具有分级列的SQL递归RCTE父子[已关闭]

pn9klfpd  于 2023-02-03  发布在  其他
关注(0)|答案(1)|浏览(145)
    • 已关闭**。此问题需要超过focused。当前不接受答案。
    • 想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。

22小时前关门了。
Improve this question
我有以下格式的数据
Input data
我想使用递归RCTE获得以下格式的输出
Output image
我很感谢你的帮助。
谢谢

to94eoyn

to94eoyn1#

检查以下脚本-

WITH CTE(RN,c_id,p_id)
AS
(
    SELECT 1,1, NULL UNION ALL
    SELECT 1,2, 1 UNION ALL
    SELECT 1,3, 1 UNION ALL
    SELECT 1,4, 2 UNION ALL
    SELECT 1,5, 4 UNION ALL
    SELECT 1,6, 5 UNION ALL
    SELECT 1,7, 6

    --Your query will be for CTE as below
    --SELECT 1 RN,c_id,p_id FROM your_table
)

SELECT c_id,
MAX (CASE WHEN RN = 2 THEN p_id ELSE NULL END) L1Parent,
MAX (CASE WHEN RN = 3 THEN p_id ELSE NULL END) L2Parent,
MAX (CASE WHEN RN = 4 THEN p_id ELSE NULL END) L3Parent,
MAX (CASE WHEN RN = 5 THEN p_id ELSE NULL END) L4Parent,
MAX (CASE WHEN RN = 6 THEN p_id ELSE NULL END) L5Parent
FROM
(
        SELECT *,ROW_NUMBER() OVER(PARTITION BY B.c_id ORDER BY B.c_id,B.p_id) RN 
        FROM
        (
            SELECT DISTINCT A.c_id,B.p_id           
            FROM CTE A
            INNER JOIN CTE B
            ON A.RN = B.RN AND A.c_id >= B.c_id
        )B
)A
GROUP BY c_id

输出为-

c_id    L1Parent    L2Parent    L3Parent    L4Parent    L5Parent
1       NULL        NULL        NULL        NULL        NULL
2       1           NULL        NULL        NULL        NULL
3       1           NULL        NULL        NULL        NULL
4       1           2           NULL        NULL        NULL
5       1           2           4           NULL        NULL
6       1           2           4           5           NULL
7       1           2           4           5           6

相关问题