我正在使用TSQL。
如果我有以下结果:
我想把它转换成这样:
我怎样才能做到这一点?
我有以下查询:
WITH q AS (
SELECT *
FROM tableOne
WHERE ID = 1
UNION ALL
SELECT m.*
FROM tableOne m
JOIN ON m.ParentID = q.ID
)
SELECT *
FROM q
这为我提供了指定节点下的所有项目,包括指定的节点。
答案 0 :(得分:2)
如果您添加脚本数据而不是图像,我们可以很容易地帮助您。请注意,tbl
是表的名称,称为3次。试试这个:
select
a.fieldValue company,
b.fieldValue department,
c.fieldValue Job
from tbl a
inner join tbl b on a.parentId is null and a.id=b.parentID
inner join tbl c on b.id= c.parentID
如果没有带来预期结果,请将数据添加为文本并告诉我,我可以修改查询
答案 1 :(得分:0)
另一种选择(假设这不是一个锯齿状的层次结构)。
这是一个标准的递归CTE,在最终的SELECT
中有一点点扭曲示例强>
;with cteP as (
Select ID
,ParentID
,PathID = cast(FieldValue as varchar(max))
From YourTable
Where ParentID is Null
Union All
Select ID = r.ID
,ParentID = r.ParentID
,PathID = cast(p.PathID+'|||'+r.FieldValue as varchar(max))
From YourTable r
Join cteP p on r.ParentID = p.ID)
Select ID
,B.*
From cteP A
Cross Apply (
Select Company = xDim.value('/x[1]','varchar(max)')
,Department = xDim.value('/x[2]','varchar(max)')
,Job = xDim.value('/x[3]','varchar(max)')
From (Select Cast('<x>' + replace(PathID,'|||','</x><x>')+'</x>' as xml) as xDim) as X
) B
Where ID not in (Select Distinct ParentID from YourTable where ParentID is not null)
Order By PathID
<强>返回强>