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

时间:2014-03-15 18:56:44

标签: sql sql-server selection hierarchical

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

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

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

我想创建一个SQL Select Query来为我返回一个分层模型,如下所示:

例如,如果SID为3,它应该为我返回:

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

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

有人可以帮我创建此查询吗?我试了两个星期但是我失败了:(

非常感谢

2 个答案:

答案 0 :(得分:0)

未经测试的答案,为了便于阅读,它不包含根成员,因为问题和评论中的示例不一致。这应该让你去。

我以root = 1

开头查询
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;

成员是由CTE(WITH ...)

创建的中间表

sqlfiddle

答案 1 :(得分:0)

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

WITH Personel_Structure AS

( SELECT [SID],MID,RANK()OVER(由[AS]分配的[SID]订购)作为POS 来自结构 WHERE [SID] = 3 ) SELECT [SID],MID 来自Personel_Structure 订购POS ASC

如果你需要对personel表进行连接,我可以对结构表进行脚本编写。只需加入CTE中的表格。