Oracle SQL - 在运行时定义的“分组依据”

时间:2014-04-15 22:33:46

标签: sql oracle group-by

简单地说,我的问题是如果可能的话如下。我这样做的方式不起作用,但也许有一些替代解决方案。

SELECT
  ID,
  Semester,
  Class,
  Sum(Hours) as Hours
FROM Student
GROUP BY
  Case '&GroupType'
    When 'Semester_Class' Then Semester || Class
    When 'Semester'       Then Semester
    When 'Class_Semester' Then Class || Semester
    When 'Class'          Then Class
    When 'Summary'        Then ID
    End

当然,这不起作用(并且不应该)但这将是概念。 (注意,这适用于Order By条款)。如果用户选择&GroupType Semester_Class,报告将汇总每个学期一个班级类型(例如英语101)的总小时数。

我认为我只是在做梦,如果没有PL / SQL(或者甚至可能),这是不可能的。但是,我认为有人可能会有一个聪明的解决方案。

如果需要进一步说明,请告诉我。

1 个答案:

答案 0 :(得分:0)

您的查询无效,因为select中的列与group by中的列不匹配。

你可以这样做(假设你正在使用PL / SQL):

select (Case :GroupType
          When 'Semester_Class' Then Semester || Class
          When 'Semester'       Then Semester
          When 'Class_Semester' Then Class || Semester
          When 'Class'          Then Class
          When 'Summary'        Then ID
        End
       ) as which, count(*)
from Student
group by (Case :GroupType
            When 'Semester_Class' Then Semester || Class
            When 'Semester'       Then Semester
            When 'Class_Semester' Then Class || Semester
            When 'Class'          Then Class
            When 'Summary'        Then ID
          End
         );