2013-06-16 3 views
0

У меня есть простой запрос с объединением 4 таблиц. Он отлично работает, и теперь мне нужно добавить еще одно соединение в этот запрос, но на этот раз таблица меняется в соответствии с одним параметром в этом запросе;Условное соединение в динамической таблице в SQL

Мой запрос выглядит следующим образом:

SELECT pat.Id,dgroup.Diagnosis as 'Description', ntest.Testname as 'TestName', 
     dgroup.Id as 'ProrityId', subt.TestSubType, **ntest.SubGroupId** 
    from pat.tbl_PatientTestRecord pat 
      JOIN tbl_Test_DiagnosisGroup InTest on pat.IndividualTestId=InTest.Id 
      JOIN tbl_NrlTests nTest ON InTest.TestId=nTest.id 
      JOIN tbl_DiagnosisGroup dgroup ON Intest.DGId=dgroup.id 
      Left Join 
      **tbl_vary** 
  • tbl_vary зависит от ntest.subgroupID. и есть, вероятно, 3 таблицы, которые могут появиться в tbl_vary.

Поскольку мой SQL немного слаб, я буду очень благодарен за соответствующее решение для этого.

+0

Какие СУБД вы используете? То, что вы просите, очень специфично для поставщика. – peterm

+0

@peterm Я использую SQL Server 2012 .. – Nhuren

ответ

1

Одним из возможных вариантов будет UNION подзапрос:

SELECT pat.Id,dgroup.Diagnosis as 'Description', ntest.Testname as 'TestName', 
     dgroup.Id as 'ProrityId', subt.TestSubType, **ntest.SubGroupId** 
    FROM pat.tbl_PatientTestRecord pat 
    JOIN tbl_Test_DiagnosisGroup InTest on pat.IndividualTestId=InTest.Id 
    JOIN tbl_NrlTests nTest ON InTest.TestId=nTest.id 
    JOIN tbl_DiagnosisGroup dgroup ON Intest.DGId=dgroup.id 
    LEFT JOIN 
     (SELECT v1.SubGroupId, v1.Relevant_Col_1 AS rc1, v1.Relevant_Col_2 AS rc2 
      FROM table_variant_1 AS v1 
     WHERE v1.SubGroupId = ntest.SubGroupID 
     UNION 
     SELECT v2.SubGroupId, v2.Alternative_1 AS rc1, v2.Alternative_2 AS rc2 
      FROM table_variant_2 AS v2 
     WHERE v2.SubGroupId = ntest.SubGroupID 
     UNION 
     SELECT v3.SubGroupId, v3.Other_Source_1 AS rc1, v3.Other_Source_2 AS rc2 
      FROM table_variant_3 AS v3 
     WHERE v3.SubGroupId = ntest.SubGroupID 
     ) AS u 
    ON u.SubGroupId = ntest.SubGroupId 

Вы могли бы быть лучше без ИНЕКЕ в подзапросы, или там могут быть и другие способы, чтобы указать стыки с союзных query ... вы не указали все много подсказок о том, как должны быть построены подзапросы.