Oracle SQL - 按不同列

时间:2018-05-14 23:27:54

标签: sql oracle plsql

我有一个基于传入的不同查询(字符串)动态创建的查询。在下面,传入以生成查询的字符串是dbms_xmlgen.get_xmltype的引用参数(引用的查询与回答问题无关,我希望更改外部查询)

SELECT s.value AS "value"
         ,im.sequence AS "sequence"
         ,lookup_detail_lib.get_type_value_message AS "prefix"
         ,lookup_detail_lib.get_type_value_message AS "suffix"
         ,im.field AS "field"
    FROM xmltable('for $i in ./ROWSET/ROW/* return $i' passing
                  dbms_xmlgen.getxmltype('SELECT blah blah this generates a clob') columns
                  column_name VARCHAR2(100) path 'local-name()'
                 ,VALUE CLOB path 'text()') s
        ,info_metadata im
        ,task t
        ,job j
   WHERE im.column_name = s.column_name
     AND im.job_type = j.job_type
     AND j.job_id = t.job_id
     AND NVL(im.task_type, t.task_type) = t.task_type
     AND t.task_id = 13580
   ORDER BY im.sequence;

此查询的结果是:

enter image description here

然而,我想要的结果会使列im.sequence按此顺序排列:1,2,3,4,2,3,4(而不是显示的1,2,2,3,3,4, 4)。我的问题是,有没有一种方法可以对这些进行分组,以便它们按照明显的升序排列im.sequence?注意:为了进一步说明,我希望操纵外部查询,我无法更改内部引用查询。任何反馈都表示赞赏!

1 个答案:

答案 0 :(得分:1)

你可以这样做:

with t as (
      <your query here>
     )
select t.*
from (select t.*,
             row_number() over (partition by sequence order by sequence) as seqnum
      from t
     ) t
order by sequence;

这不会重复&#34; 1&#34;排,但它会根据你的需要对其余部分进行排序。