如何编写附加不相关行的SQL查询?

时间:2015-08-11 15:41:23

标签: sql oracle select

我有一个Oracle数据库,我需要一个查询来进行报告。在我的表中,我有action_types和动作的日期。我想要计算某些组中的操作数量,并显示该类型的最新操作。

所以我想要的是像

   Group               Number             Date
 Administrative          3              01/02/2015
 User                    1              01/03/2015  
 View-Only               2              01/04/2015  

问题是每个组都包含多个action_types,因此表本身看起来像

 Action_Type              Date
    01                 01/02/2015
    04                 01/03/2015
    02                 01/02/2015
    03                 01/02/2015
    05                 01/03/2015
    06                 01/04/2015

如果操作01,02,03都是管理操作,则04是用户操作,05和06是仅查看操作。

我可以编写一个查询,它将返回我想要的单行 - 单个组的编号和最近日期,但是我想要一个将所有组放在一起的查询,每个组都有自己的行如上。这可能吗?

1 个答案:

答案 0 :(得分:5)

我认为您只需要case语句进行分组:

select (case when Action_Type in ('01', '02', '03') then 'Administrative'
             when Action_Type in ('04') then 'User'
             when Action_Type in ('05', '06') then 'View-Only'
             else 'Unknown'
        end) as Action_Group, count(*), max(date)
from actions a
group by (case when Action_Type in ('01', '02', '03') then 'Administrative'
               when Action_Type in ('04') then 'User'
               when Action_Type in ('05', '06') then 'View-Only'
               else 'Unknown'
          end) ;

但是,我建议您为包含所需分组的操作类型创建一个引用表(如果您还没有这样的表)。