mssql 父子查找 sql

mssql parent child lookup sql

所以我这里有一个 table 和这个相似 http://sqlfiddle.com/#!9/ea557/1 这是一个更大的综合体 sql 的一小部分。我想要的输出需要像

ParentId | TopChildId | AllChild     | Priority
--------------------------------------------
  10     |   541      | 345, 541     | 2
  12     |   125      | 123, 124,125 | 3
  13     |   103      | 103, 104     | 2
  14     |   161      | 161          | 1

我希望这是有道理的。因此,在一行中,我想查看具有最大优先级编号的父 ID、子 ID,并在一列中列出所有子 ID 的串联。

感谢对此的任何帮助。

要获得顶部 priorityCID,您可以使用 ROW_NUMBER。要获得每个 PID 的串联 CID,您可以使用 FOR XML PATH:

SQL Fiddle

WITH Cte AS(
    SELECT *, rn = ROW_NUMBER() OVER(PARTITION BY PID ORDER BY priority DESC)
    FROM ParChi
)
SELECT
    ParentID = c.PID,
    TopChildId = c.CID,
    x.AllChild,
    c.priority
FROM Cte c
CROSS APPLY(
    SELECT STUFF((
        SELECT ', ' + CONVERT(VARCHAR(10), CID)
        FROM ParChi
        WHERE PID = c.PID
        ORDER BY priority
        FOR XML PATH('')
    ),1, 2, '') AS AllChild
) x
WHERE rn = 1
ORDER BY ParentID
SELECT p.PID AS ParentId , MAX(p.CID) AS TopChildId, temp.AllChild, MAX(p.priority) 
FROM ParChi p
OUTER APPLY
(
    SELECT 
    STUFF((SELECT ', ' +  pc.CID 
    FROM ParChi pc          
    WHERE pc.PID = p.PID
    FOR XML PATH(''), TYPE).value('.', 'VARCHAR(MAX)'), 1, 0, '') AS AllChild   
)AS temp
GROUP BY p.PID ORDER BY p.PID