题目
有如下一张表T0311

希望得到如下结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CVDTQWUh-1615905813416)(./images/结果-每日一题20210315.png)]
即根据父ID(PARENTID)来逐级显示产品名和层级序号
测试数据
CREATE TABLE T0315(
ID INT,
PRODUCTNAME VARCHAR(64),
PARENTID INT,
)
INSERT INTO T0315 VALUES ( 1,'汽车',NULL)
INSERT INTO T0315 VALUES ( 2,'车身',1)
INSERT INTO T0315 VALUES ( 3,'发动机',1)
INSERT INTO T0315 VALUES ( 4,'车门',2)
INSERT INTO T0315 VALUES ( 5,'驾驶舱',2)
INSERT INTO T0315 VALUES ( 6,'行李舱',2)
INSERT INTO T0315 VALUES ( 7,'气缸',3)
INSERT INTO T0315 VALUES ( 8,'活塞',3)
参考答案
官方答案:
;WITH CTE AS
(
SELECT ID,PARENTID,PRODUCTNAME,0 CTELEVEL,CAST(ID AS VARCHAR) ORDERID
FROM T0315
WHERE ID=1
UNION ALL
SELECT
A.ID,A.PARENTID,A.PRODUCTNAME,B.CTELEVEL+1,CAST(B.ORDERID+'->'+LTRIM(A.ID) AS VARCHAR)
FROM T0315 A
INNER JOIN CTE B ON B.ID=A.PARENTID
)
SELECT ID,PARENTID,
RIGHT(' ',4*CTELEVEL)+PRODUCTNAME PRODUCTNAME,ORDERID
FROM CTE
ORDER BY ORDERID
考点: WITH CTE AS(XX UNION ALL CTE)、RIGHT()、LTRIM()
说明:在
with块中继续使用CTE变相使用递归思想

本文介绍了一种使用SQL的WITH CTE AS语法进行递归查询的方法,并通过一个具体例子展示了如何根据父ID逐级显示产品名称及其层级序号。该方法适用于构建产品分类等层级结构数据。
755

被折叠的 条评论
为什么被折叠?



