2010-07-02 4 views
0

Voici ma requête jusqu'ici:SQL - Grab lignes de détails comme les colonnes Rejoindre

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') 

Maintenant, j'ai une autre table (CONTSUPP) qui contient plusieurs enregistrements détaillés pour chaque enregistrement CONTACT1. Par exemple - GPA de lycée, SAT, ACT, etc. J'ai besoin de tirer ces valeurs dans la même ligne que mes résultats de contact1 - mais déterminez l'en-tête de colonne basé sur l'information dans la colonne. Par exemple, je sais que je pourrais faire ceci:

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') 

Ne demandez pas pourquoi (svp) - mais l'état tient les valeurs de catégorie. Le problème est que cela me donne notes sans dire quel type de notes, donc je dois faire quelque chose comme ça (pseudo):

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') 

aide?

Répondre

3
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') 

Mise à jour: Ajout exemple seulement en utilisant le plus haut score de 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') 
+0

Deux questions rapides. Le premier est que j'essaie d'ajouter deux valeurs ensemble comme suit: OFF_SAT_COMP.LINKACCT + SLF_ACT_COMP.COUNTRY en tant que 'SAT - Composite' - mais il suffit de joindre les deux valeurs - ne les ajoute pas. Deuxièmement, cette requête semble aboutir à plusieurs lignes dans certains cas pour certaines personnes. – davemackey

+0

J'ai ajouté un échantillon pour inclure uniquement le score le plus élevé. Pour ce qui est de votre autre problème, je devine linkacct et le pays ne sont pas des champs numériques.Vous devrez faire la conversion avant d'ajouter par exemple CAST (linkaccount as int) + CAST (country as int) –