我在创建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的子集)
有人可以帮我创建此查询吗?我试了两个星期但是我失败了:(
非常感谢
答案 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 ...)
创建的中间表答案 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中的表格。