Добавление строк столбца в запросе - PullRequest
0 голосов
/ 16 ноября 2011

Вот мой текущий запрос:

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

Хорошо, я пытаюсь использовать sum () (или какую-либо другую функцию) для суммирования всех кредитных часов, которые были получены. Таким образом, в этом случае сумма всех кредитных часов будет равна «15». Есть ли способ сделать это в запросе? В идеале я бы хотел что-то вроде этого:

cred      status   currentDate   censusDate     ssn
====      ======   ===========   ==========     ===
 15         N       11/16/2011   12/15/2011      xxx-xx-xxxx

Ответы [ 2 ]

1 голос
/ 16 ноября 2011

Способ сделать это - GROUP BY все остальные ваши столбцы. Поскольку вы не можете сгруппировать по столбцам с псевдонимами напрямую (в Oracle и большинстве RDMBS), вам нужно обернуть все это в другой запрос и выполнить группировку там.

SELECT SUM(cred), status, censusDate, ssn 
FROM
    (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')
GROUP BY status, censusDate, ssn;

Это выглядит некрасиво, но на самом деле не оказывает ужасного влияния на производительность.

0 голосов
/ 16 ноября 2011
select groupcol, sum(cred)
from table1
group by rollup(groupcol)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...