2015-03-30 5 views
0

Мне интересно, как я собирался объединить следующие таблицы вместе, у меня есть два вопроса, которые были заданы в течение двух лет сбора. Я хочу сопоставить результаты. Обратите внимание, что followUp будет постоянным для всех в таблице.Как объединить несколько однородных таблиц

Q1YR1 
SubjectNo FollowUp Response 
1   1   Yes 
2   1   No 

Q2YR1 
SubjectNo FollowUp Response 
1   1   No 
2   1   Yes 

Q2YR2 
SubjectNo FollowUp Response 
1   2   Yes 
2   2   Yes 

Q2YR2 
SubjectNo FollowUp Response 
1   2   No 
2   2   No 

Я пытаюсь получить к следующему:

SubjectNo FollowUp Q1YR1 Q2YR1 Q1YR2 Q2YR2 
1   1  Yes No 
1   2     Yes No 
2   1  No Yes 
2   2     Yes No 

До сих пор я взял объединение таблиц:

(SELECT subjectno_0 AS SubjectNo, aiw_0 AS Age, followup_0 AS FollowUp, dataresponse_0 AS Q1YR1, NULL AS Q2YR1, NULL AS Q1YR2, NULL AS Q2YR2 FROM question1yr1) 
UNION ALL 
(SELECT subjectno_0 AS SubjectNo, aiw_0 AS Age, followup_0 AS FollowUp, NULL AS Q1YR1, dataresponse_0 AS Q2YR1, NULL AS Q1YR2, NULL AS Q2YR2 FROM question2yr1) 
UNION ALL 
(SELECT subjectno_0 AS SubjectNo, aiw_0 AS Age, followup_0 AS FollowUp, NULL AS Q1YR1, NULL AS Q2YR1, dataresponse_0 AS Q1YR2, NULL AS Q2YR2 FROM question1yr2) 
UNION ALL 
(SELECT subjectno_0 AS SubjectNo, aiw_0 AS Age, followup_0 AS FollowUp, NULL AS Q1YR1, NULL AS Q2YR1, NULL AS Q1YR2, dataresponse_0 AS Q2YR2 FROM question2yr2) 

Который получает меня половину пути туда, но, очевидно, не присоединяется к ответам SubjectNo и FollowUp. Я пробовал присоединиться к себе, но я не могу понять, что это правда.

Любые идеи?

ответ

0

Проблема с этой ситуацией заключается в нахождении набора всех подлежащих номеров и наблюдений, которые существуют. Если вы знаете, что это такое (позволяет сказать, что это таблица называется subjectnumber) это простой левое соединение:

SELECT SN.SubjectNo, SN.FollowUp, 
    Q1YR1.Response AS Q1YR1, 
    Q2YR1.Response AS Q2YR1, 
    Q1YR2.Response AS Q1YR2, 
    Q2YR2.Response AS Q2YR2 
FROM SubjectNumber SN 
LEFT JOIN Q1YR1 ON SN.SubjectNo = Q1YR1.SubjectNo AND SN.FollowUp = Q1YR1.FollowUp 
LEFT JOIN Q2YR1 ON SN.SubjectNo = Q2YR1.SubjectNo AND SN.FollowUp = Q2YR1.FollowUp 
LEFT JOIN Q1YR2 ON SN.SubjectNo = Q1YR2.SubjectNo AND SN.FollowUp = Q1YR2.FollowUp 
LEFT JOIN Q2YR2 ON SN.SubjectNo = Q2YR2.SubjectNo AND SN.FollowUp = Q2YR2.FollowUp 

Если вы не один из этих тематических таблиц чисел, то вы должны сделать один из ваших таблицы инцидентов, используя такой союз:

SELECT SN.SubjectNo, SN.FollowUp, 
    Q1YR1.Response AS Q1YR1, 
    Q2YR1.Response AS Q2YR1, 
    Q1YR2.Response AS Q1YR2, 
    Q2YR2.Response AS Q2YR2 
FROM (
    SELECT SubjectNo, FollowUp FROM Q1R1 UNION 
    SELECT SubjectNo, FollowUp FROM Q2R1 UNION 
    SELECT SubjectNo, FollowUp FROM Q1R2 UNION 
    SELECT SubjectNo, FollowUp FROM Q2R2 
) SN 
LEFT JOIN Q1YR1 ON SN.SubjectNo = Q1YR1.SubjectNo AND SN.FollowUp = Q1YR1.FollowUp 
LEFT JOIN Q2YR1 ON SN.SubjectNo = Q2YR1.SubjectNo AND SN.FollowUp = Q2YR1.FollowUp 
LEFT JOIN Q1YR2 ON SN.SubjectNo = Q1YR2.SubjectNo AND SN.FollowUp = Q1YR2.FollowUp 
LEFT JOIN Q2YR2 ON SN.SubjectNo = Q2YR2.SubjectNo AND SN.FollowUp = Q2YR2.FollowUp 
Смежные вопросы