代码之家  ›  专栏  ›  技术社区  ›  Dave Mackey chem1st

SQL-获取细节行作为联接中的列

  •  0
  • Dave Mackey chem1st  · 技术社区  · 16 年前

    到目前为止,我的问题是:

    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中每条记录的多个详细记录。例如,高中GPA、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 回复  |  直到 16 年前
        1
  •  3
  •   Conrad Frix    16 年前
    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')