SQL-在联接中将详细信息行作为列抓取

SQL-在联接中将详细信息行作为列抓取,sql,tsql,Sql,Tsql,这是我到目前为止的疑问: 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='2

这是我到目前为止的疑问:

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')
不要问为什么(请)——但州政府保留等级值。问题是,这给了我分数,但没有告诉我什么类型的分数,所以我需要这样做(伪):

帮忙

更新:添加了仅使用最高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')
更新:添加了仅使用最高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')

两个快速问题。一个是,我试图像这样将两个值相加:OFF_SAT_COMP.LINKACCT+SLF_ACT_COMP.COUNTRY作为“SAT-Composite”,但它只是将两个值相加,而不是相加。其次,在某些情况下,这个查询似乎会导致某些个人出现多行。至于你的另一个问题,我猜linkacct和country不是数字字段。你需要在添加前进行转换,例如CAST(linkaccount为int)+CAST(country为int)两个快速的问题。一个是,我正试图像这样将两个值相加:OFF_SAT_COMP.LINKACCT+SLF_ACT_COMP.COUNTRY作为“SAT-Composite”-但它只是将两个值合并在一起-并没有添加它们。其次,在某些情况下,对于某些个人,此查询似乎会导致多行。我添加了一个仅包含最高分数的示例。至于还有一个问题,我猜linkacct和country不是数字字段。您需要在添加之前进行转换,例如CAST(linkaccount为int)+CAST(country为int)
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')