SQL - захватывать подробные строки как столбцы в соединении - PullRequest
0 голосов
/ 02 июля 2010

Это мой запрос на данный момент:

select C.ACCOUNTNO,C.CONTACT,KEY1,KEY4 from contact1 C
left join CONTSUPP CS on C.accountno=CS.accountno
where 
C.KEY1!='00PRSP' 
AND (C.U_KEY2='2009 FALL' 
    OR C.U_KEY2='2010 SPRING' 
    OR C.U_KEY2='2010 J TERM' 
    OR C.U_KEY2='2010 SUMMER')

Теперь у меня есть другая таблица (CONTSUPP), которая содержит несколько подробных записей для каждой записи в CONTACT1. Например, средний школьный балл, SAT, ACT и т. Д. Мне нужно вывести эти значения в ту же строку, что и мои результаты contact1, но определить заголовок столбца на основе информации в столбце. Например, я знаю, что мог бы сделать это:

select C.ACCOUNTNO,C.CONTACT,KEY1,KEY4,STATE from contact1 C
left join CONTSUPP CS on C.accountno=CS.accountno
where 
C.KEY1!='00PRSP' 
AND (C.U_KEY2='2009 FALL' 
    OR C.U_KEY2='2010 SPRING' 
    OR C.U_KEY2='2010 J TERM' 
    OR C.U_KEY2='2010 SUMMER')

Не спрашивайте, почему (пожалуйста), но штат держит оценки. Проблема в том, что это дает мне оценки, не сообщая, какой тип оценок, поэтому мне нужно сделать что-то вроде этого (псевдо):

select C.ACCOUNTNO,C.CONTACT,C.KEY1,C.KEY4,
  STATE as GPA when CS.CONTACT='High School'
  STATE as SAT when CS.CONTACT='Test/SAT'
  ..
from contact1 C
left join CONTSUPP CS on C.accountno=CS.accountno
where 
C.KEY1!='00PRSP' 
AND (C.U_KEY2='2009 FALL' 
    OR C.U_KEY2='2010 SPRING' 
    OR C.U_KEY2='2010 J TERM' 
    OR C.U_KEY2='2010 SUMMER')

Помощь

1 Ответ

3 голосов
/ 02 июля 2010
select 
    C.ACCOUNTNO,
    C.CONTACT,
    C.KEY1,
    C.KEY4,  
    HichschoolCS.State as HighSchool,  
    TestSatCS.state as Test


from 
    contact1 C
    left join CONTSUPP HichschoolCS on C.accountno=HichschoolCS.accountno 
        and HichschoolCS.contact = 'High School'
    left join CONTSUPP TestSatCS on C.accountno=TestSatCS.accountno 
        and TestSatCS.contact = 'Test/SAT'
where 
    C.KEY1!='00PRSP' 
    AND (C.U_KEY2='2009 FALL' 
    OR C.U_KEY2='2010 SPRING' 
    OR C.U_KEY2='2010 J TERM' 
    OR C.U_KEY2='2010 SUMMER')

Обновление: добавлен пример использования только самого высокого балла SAT

select 
    C.ACCOUNTNO,
    C.CONTACT,
    C.KEY1,
    C.KEY4,  
    HichschoolCS.State as HighSchool,  
    TestSatCS.state as Test


from 
    contact1 C
    left join CONTSUPP HichschoolCS on C.accountno=HichschoolCS.accountno 
        and HichschoolCS.contact = 'High School'
    left join (SELECT MAX(state) state, 
        accountno
        FROM
            CONTSUPP TestSatCS 
        WHERE 
            contact = 'Test/SAT'
        GROUP
            accountno) TestSatCS
    on C.accountno=TestSatCS.accountno 

where 
    C.KEY1!='00PRSP' 
    AND (C.U_KEY2='2009 FALL' 
    OR C.U_KEY2='2010 SPRING' 
    OR C.U_KEY2='2010 J TERM' 
    OR C.U_KEY2='2010 SUMMER')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...