针对树状结构的数据(ID,PID,NAME类),有时候我们需要将所有节点拼接起来,例如表中有如下数据
ID PID NAME
------------------------------
1 四川
2 1 成都
3 1 绵阳
4 2 双流
我们需要得到这样的结果,
1 四川
2 四川/成都
3 四川/绵阳
4 四川/成都/双流
此时我们可以采用with语句来实现
WITH T AS ( SELECT GUID ,
CAST(TYPENAME AS NVARCHAR(MAX)) AS TYPENAME ,
PARENTID
FROM dbo.FAIS_BS_HELPREASON
WHERE PARENTID = '0'
UNION ALL
SELECT a.GUID ,
CAST(t.TYPENAME + '/' + a.TYPENAME AS NVARCHAR(MAX)) AS TYPENAME ,
a.PARENTID
FROM dbo.FAIS_BS_HELPREASON a
INNER JOIN T ON a.PARENTID = T.GUID
)
SELECT *
FROM T
执行结果如下