这里是我当前的查询:添加了一列的列在查询
SELECT sac.cred, s.status, (SELECT NVL (csl.census_dates, tl.census_dates)
FROM schema.sections cs, schema.sections_ls csl, schema.terms tl
WHERE cs.course_sections_id = csl.course_sections_id(+)AND csl.pos(+) = 1 AND cs.term = tl.terms_id
AND tl.pos = 1 AND cs.course_sections_id = cs2.course_sections_id AND ROWNUM = 1)AS censusDate,
(SELECT NVL (p.ssn, 'xxx-xx-xxxx') FROM schema.person p
WHERE p.id = sac.person_id) AS ssn,
//schema.person_name(sac.person_id, 'FML') as fml,
//schema.person_name(sac.person_id, 'LF') as lf
FROM schema.student_acad_cred sac JOIN schema.statuses s
ON s.student_acad_cred_id = sac.student_acad_cred_id
JOIN schema.terms tl ON sac.term = tl.terms_id
JOIN schema.student_course_sec scs ON sac.student_course_sec = scs.student_course_sec_id
JOIN schema.course_sections cs2 ON scs.course_section = cs2.course_sections_id
JOIN schema.terms t ON tl.terms_id = t.terms_id
WHERE sac.person_id = '1111111111'
AND (s.status IN ('A', 'N') OR (s.status = 'D' AND final_grade IS NOT NULL))
AND s.pos = '1'AND tl.pos = '1' AND tl.terms_id = 'spring';
而且这里的结果:
cred status currentDate censusDate ssn
==== ====== =========== ========== ===
3 N 11/16/2011 12/15/2011 xxx-xx-xxxx
4 N 11/16/2011 12/15/2011 xxx-xx-xxxx
3 N 11/16/2011 12/15/2011 xxx-xx-xxxx
4 N 11/16/2011 12/15/2011 xxx-xx-xxxx
1 N 11/16/2011 12/15/2011 xxx-xx-xxxx
好吧,我所要做的是使用总和()(或其他函数)合计所有拉出的积分时间。因此在这种情况下,所有的信用小时数的总和将是'15'。有没有办法在查询中做到这一点?理想情况下,我想要这样的事情:
cred status currentDate censusDate ssn
==== ====== =========== ========== ===
15 N 11/16/2011 12/15/2011 xxx-xx-xxxx
为什么要显示单个记录的SUM信用信息?另外,当你根据一个不变的'person_id'获得'ssn'时,为什么'ssn'对于同一个人会有所不同呢?事实上,为什么不只是''加入'schema.person'而不是做一个子选择? – ean5533
我真的需要一个理由吗?大声笑,信用时间的总和,毫无疑问,需要。 reults完全组成,我只是在打字。加入人员需要3次以上的连接(我没有设置表格),这使得查询执行时间大约需要两倍。 – Dan
还有3个连接?它只需要一个连接:'JOIN schema.person p ON sac.person_id = p.person_id'。你本质上已经在做,只是以一种非常奇怪的方式。我问的原因是因为你的输出没有任何意义 - “ssn”永远不会有所不同,它永远都是一样的。在我们确定了这个事实之后,看到你只是输出同一行5次这很愚蠢......这很愚蠢。相反,你应该做一个“GROUP BY”并且只产生一行,这是“SUM”有意义的地方。 – ean5533