SQL Server 2008: множество таблиц с полем упорядочения реляционных таблиц + группировка - PullRequest
0 голосов
/ 24 июня 2011

Чтобы понять, что мне нужно, вот таблица, в которой я использую диаграмму: http://pascalc.nougen.com/stuffs/diagram.png

Мне нужно получить свойства проекта + все его отношения, все перечисленные на основе столбца OrderNumber соответствующих реляционных таблиц.

Допустим, мне нужен "Проект Z", я хочу получить:

  • BaseUrl проекта, ... где ID = @ ID
  • Все тестовые наборы, связанные с этим проектом, перечислены ProjectsToTestSuites.OrderNumber
  • Все тестовые наборы, связанные с соответствующими тестовыми наборами, перечислены в TestSuitesToTestCases.OrderNumber
  • Все тесты, связанные с соответствующими тестовыми примерами, перечисленные в TestCasesToTestActions.OrderNumber

Пока что все мои попытки возвращают результаты со смешанным порядком. Тестовый набор смешан внутри тестового набора, к которому он не принадлежит и не похож.

Я стараюсь избегать использования курсоров (зацикливать каждое отношение в определенном порядке), пробовал использовать UNION, но также не мог заставить его работать.

У меня не будет проблем с курсором, но если решение существует без необходимости его использования, я, конечно, предпочитаю.

Спасибо

1 Ответ

0 голосов
/ 24 июня 2011

Если вы хотите получить плоский результат, вы можете начать с чего-то вроде этого (не проверено)

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
...