access 查询设计,树状查询。用sql语句如何实现?
各位大神好,请教个问题。现在我的数据库分为N个层级,每两个相邻层级之间有一个关系表,格式大概类似下图:层级1到层级2的关系层级2到层级3的关系。以上为示意图,每个层级还有...
各位大神好,请教个问题。
现在我的数据库分为N个层级,每两个相邻层级之间有一个关系表,格式大概类似下图:
层级1到层级2的关系
层级2到层级3的关系。
以上为示意图,每个层级还有其他信息,有很多层。现在想把所有的数据查询到一张表上,做成后的结构类似于:
每个层级的子层级都列好后再列下一个层级。
这种用Sql语句好写么? VBA的话没学过,希望各位能帮帮忙,看看如何解决最简洁。多谢了! 展开
现在我的数据库分为N个层级,每两个相邻层级之间有一个关系表,格式大概类似下图:
层级1到层级2的关系
层级2到层级3的关系。
以上为示意图,每个层级还有其他信息,有很多层。现在想把所有的数据查询到一张表上,做成后的结构类似于:
每个层级的子层级都列好后再列下一个层级。
这种用Sql语句好写么? VBA的话没学过,希望各位能帮帮忙,看看如何解决最简洁。多谢了! 展开
1个回答
展开全部
假设 有表 c0,c1,c2
SELECT * INTO #t1 FROM (SELECT #c0.id0 , #c1.id1 ,#c2.id2, row_number() OVER(ORDER BY #c0.id0) AS line FROM #c0
LEFT JOIN #c1 ON #c0.id0=#c1.id0
LEFT JOIN #c2 ON #c1.id1=#c2.id1) AS a1
CREATE TABLE #t2(
id
)
INSERT INTO #t2 (id) SELECT id0 FROM #t1 GROUP by id0
INSERT INTO #t2 (id) SELECT id1 FROM #t1 GROUP by id1
INSERT INTO #t2 (id) SELECT id2 FROM #t1 GROUP by id2
SELECT * from #t2 ORDER BY id
SELECT * INTO #t1 FROM (SELECT #c0.id0 , #c1.id1 ,#c2.id2, row_number() OVER(ORDER BY #c0.id0) AS line FROM #c0
LEFT JOIN #c1 ON #c0.id0=#c1.id0
LEFT JOIN #c2 ON #c1.id1=#c2.id1) AS a1
CREATE TABLE #t2(
id
)
INSERT INTO #t2 (id) SELECT id0 FROM #t1 GROUP by id0
INSERT INTO #t2 (id) SELECT id1 FROM #t1 GROUP by id1
INSERT INTO #t2 (id) SELECT id2 FROM #t1 GROUP by id2
SELECT * from #t2 ORDER BY id
追问
不好意思,刚学。不太懂。
能稍微写个注释吗?
尤其是 (SELECT #c0.id0 , #c1.id1 ,#c2.id2, row_number() OVER(ORDER BY #c0.id0) 完全晕了。
整体的结构是什么,能稍微说一下吗。麻烦啦!!!
追答
#c0
id0 note
#c1
id1 id0 note
#c2
id2,id1 note
(SELECT #c0.id0 , #c1.id1 ,#c2.id2, row_number() OVER(ORDER BY #c0.id0) AS line FROM #c0
LEFT JOIN #c1 ON #c0.id0=#c1.id0
LEFT JOIN #c2 ON #c1.id1=#c2.id1) AS a1
可以改成
(SELECT #c0.id0 , #c1.id1 ,#c2.id2 FROM #c0
LEFT JOIN #c1 ON #c0.id0=#c1.id0
LEFT JOIN #c2 ON #c1.id1=#c2.id1) AS a1
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询