create table Test
(
Id int identity,
Name varchar(50) not null,
SName varchar(50) null,
ParentId int null
)
insert into Test
values ('aaa', 'bbb', null), ('adf', '22b', null), ('aad', 'bbsd',2),('asdsaa', 'bf', 3),('sdfs','sdf',3),('iopio','uiopio',3)
select * from Test
我有一个包含parentid
的表,我想得到类似的值
Name SName "aaa" "bbb" , "adf" {"aad":{"asdsaa":"bf"}}
从所选值
我一直想用递归查询得到它,但是...
WITH tree_view AS
(
SELECT
Id, ParentId, Name, SName
FROM
Test
UNION ALL
SELECT
parent.Id, parent.ParentId, parent.Name, parent.SName
FROM
Test parent
JOIN
tree_view tv ON parent.ParentId = tv.Id
)
SELECT DISTINCT *
FROM tree_view
我想得到这个
如果父ID不为空,则在一次销售中,我希望在Sname字段中获得Name:SName
2条答案
按热度按时间1szpjjfi1#
我认为您需要使用PIVOT:下面是您可以尝试的类似解决方案
样表创建:
插入样本值:
使用透视表查询以获取所需输出:
输出:
希望这有助于解决您的问题。
mspsb9vt2#
如果你确信任何父节点只指向一个叶子节点,那么只使用字符串操作就可以生成你想要的JSON:
但你也应该更好地解释一些水平〉3的替代规则。