【问题标题】:Group By Rollup suppress extra line of dataGroup By Rollup 抑制额外的数据行
【发布时间】:2013-10-30 19:10:28
【问题描述】:

我使用的是 Oracle 11g 数据库。

查询:

SELECT s.id, s.grade_level, 
((1990+substr(sg.termid,1,2))||'-'||(1991+substr(sg.termid,1,2))) as  "School Year",
SUM(sg.earnedcrhrs) as "Credits"

FROM students s
JOIN storedgrades sg ON s.id = sg.studentid

WHERE s.schoolid = 109
AND s.id = '3466'
AND s.enroll_status = 0
AND sg.schoolid = 109

GROUP BY ROLLUP(s.id, s.grade_level, substr(sg.termid,1,2))
ORDER BY s.id, substr(sg.termid,1,2)

输出:

有没有一种方法可以编写我的查询,使得第 5 行或第 6 行都不产生?每个学生只需要一个小计(ID 列)。

【问题讨论】:

    标签: sql oracle null group-by rollup


    【解决方案1】:

    这有点棘手。试试这个:

    SELECT s.id, s.grade_level, 
    ((1990+substr(sg.termid,1,2))||'-'||(1991+substr(sg.termid,1,2))) as  "School Year",
    SUM(sg.earnedcrhrs) as "Credits"
    
    FROM students s
    JOIN storedgrades sg ON s.id = sg.studentid
    
    WHERE s.schoolid = 109
    AND s.id = '3466'
    AND s.enroll_status = 0
    AND sg.schoolid = 109
    
    GROUP BY ROLLUP(s.id, (s.grade_level, substr(sg.termid,1,2)))
    ORDER BY s.id, substr(sg.termid,1,2);
    

    (不同的是我把s.grade_level, substr(sg.termid,1,2)放在了GROUP BY子句的括号里)

    总的来说,我强烈推荐 Tim Hall 的这篇文章:Rollup, Cube and GROUPING functions

    【讨论】:

    • 感谢您的建议! :-)
    【解决方案2】:

    我得到了 O'Reilly 的 Mastering Oracle SQL 的副本,作者是 Sanjay Misbra 和 Alan Beaulieu。根据他们的文档,我实际上以稍微不同的方式做到了这一点......

    我将 GROUP BY 行从

    GROUP BY ROLLUP(s.id, s.grade_level, substr(sg.termid,1,2))
    

    GROUP BY s.id, s.grade_level, ROLLUP(substr(sg.termid,1,2))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-11
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      • 2020-09-25
      • 1970-01-01
      • 1970-01-01
      • 2017-07-24
      相关资源
      最近更新 更多