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