Concat Min-Max GROUP BY到查询之间

时间:2014-11-28 21:22:57

标签: sql oracle group-by

晚上好,我有一张包含如下表格的表格:

  

类别ID
  Cat1 1
  Cat2 2
  Cat1 3
  Cat1 4
  Cat1 5
  Cat2 6
  Cat2 7

我想获得如下结果

  

Cat1 1 - 1
  Cat2 2
  Cat1 3 - 5(而不是3 - 4 - 5(我需要选择列表的最小和最大值)
  Cat2 6
  Cat2 7

我已经开始使用查询

  

SELECT类别,LISTAGG(ID,'')WITHIN GROUP(ORDER BY Category)AS desc   从表   GROUP BY类别;

如您所见,Cat1可以包含2个ID(最小和最大),但Cat2不是这种情况。

您对这个问题有所了解吗?

我希望能够清楚。

感谢。

西里尔

2 个答案:

答案 0 :(得分:2)

您可以使用row_numbers()执行此操作。实际上,标识一组顺序ID的id和行号之间存在差异:

select category,
       (case when min(id) = max(id) then id
             else min(id) || '-' || max(id)
        end) as id_range
from (select t.*,
             (id - 
              row_number() over (partition by category order by id)
             ) as grp
      from table t
     ) t
group by category, grp;

答案 1 :(得分:1)

试试这个::

select category
     ,min(id) || (case when min(id)=max(id) then 
                                ' '
                           else 
                             '-'||max(id) end) as "MIN-MAX-VALUE"
from temp 
group by category;