首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用SQL查询进行分层选择

如何使用SQL查询进行分层选择
EN

Stack Overflow用户
提问于 2014-03-16 02:56:44
回答 2查看 100关注 0票数 0

我在创建SQL查询时遇到问题,如下所示:

我有两个表,其中包含以下规格和数据:

http://dc699.4shared.com/img/lgtP3N_4ce/s3/144c7252ff8/SQL1.jpg

我想创建一个SQL Select查询,以便为我返回一个分层模型,如下所示:

例如,如果SID是3,它应该为我返回以下内容:

http://dc699.4shared.com/img/8UufpK2-ce/s3/144c7255af0/SQL2.jpg

因为结构表中与数据7、8、9和9相关的数字3与10、11相关(请注意,9与3相关,或者换句话说,9是3的子集)

有人能帮我创建这个查询吗?我已经试了两个星期了,但是失败了:

非常感谢

EN

回答 2

Stack Overflow用户

发布于 2014-03-16 04:17:10

未经测试的答案,它不包括根成员的可读性,因为您在问题和注释中的示例不一致。这应该能让你振作起来。

我从root =1开始进行查询

代码语言:javascript
复制
WITH members (id)
AS
(SELECT MID as id FROM structure WHERE SID = 1
UNION ALL
SELECT     MID as id 
FROM       members 
INNER JOIN structure ON (members.id = structure.SID)
)
SELECT members.ID FROM members;

members是由CTE创建的中间表(带有...)

票数 0
EN

Stack Overflow用户

发布于 2014-03-16 23:25:48

您也可以尝试像这样的Rank解决方案

代码语言:javascript
复制
WITH Personel_Structure AS

( SELECT SID,MID,RANK() OVER(PARTITION BY SID ORDER BY MID ASC) AS POS FROM Structure WHERE SID =3) SELECT SID,MID FROM Personel_Structure ORDER BY POS ASC

如果您需要连接到personel表,我有针对结构表的脚本,这应该很容易。只要加入CTE中的表格即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22428291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档