SQL Server 2008:具有关系表排序字段+分组的多对多表

时间:2011-06-24 01:03:16

标签: tsql sql-server-2008 union

为了理解我的需要,这里是我正在使用图表的表:http://pascalc.nougen.com/stuffs/diagram.png

我需要获取项目的属性+所有它的关系,所有这些都是根据相应的关系表'OrderNumber列列出的。

假设我需要“Project Z”,我想得到:

  • Project的BaseUrl,...其中ID = @ID
  • 与该项目相关的所有测试套件,由ProjectsToTestSuites.OrderNumber列出
  • 所有与匹配测试套件相关的测试用例,由TestSuitesToTestCases.OrderNumber列出
  • 与匹配测试用例关联的所有测试操作,由TestCasesToTestActions.OrderNumber列出

到目前为止,我所有的尝试都是通过混合排序返回结果。测试用例混合在一个不属于和类似的测试套件中。

我尽量避免使用游标(按照特定的顺序循环每个关系),尝试使用UNION但无法使其工作。

我不会遇到光标问题,但如果存在不需要使用它的解决方案,我当然更喜欢。

由于

1 个答案:

答案 0 :(得分:0)

如果你想要一个平坦的结果,你可以从这样的事情开始(未经测试)

select
    p.Id,
    p.BaseUrl,
    ts.*,
    tc.*,
    ta.*,
    pts.OrderNumber as SuitesOrder,
    tstc.OrderNumber as CasesOrder,
    tcta.OrderNumber as ActionsOrder
from
    Projects p
join
    ProjectToTestSuites pts
    on pts.Projects_Id = p.Id
join
    TestSuites ts
    on ts.Id = pts.TestSuites_Id
join
    TestSuitesToTestCases tstc
    on tstc.TestSuites_Id = ts.Id
join
    TestCases tc
    on tc.Id = tstc.TestCases_Id
join
    TestCasesToTestActions tcta
    on tcta.TestCases_Id = tc.Id
join
    TestActions ta
    on ta.Id = tcta.TestActions_Id
where
    p.Id = @Id
order by
    pts.OrderNumber,
    tstc.OrderNumber,
    tcta.OrderNumber