Oracle SQL查询用于基于优先级显示

时间:2018-08-31 07:18:10

标签: sql oracle

这是我根据优先级获取前五行的查询。     如果只有两个contact_names可用-说name1name2-我希望输出为name1,name2,,,
    但是我得到name1,name2

如何获取结尾的逗号?

with cte as ( 
     select pc.person_number 
           ,pc.contact_names 
           ,pc.contact_type 
           ,case when pl.relation='parent' then 'a' 
                 when pl.relation='children' then 'b' 
                 when pl.relation='sibling' then 'c' 
            end as priority 
      from person_contact pc 
          ,person_lookup pl 
     where pc.contact_type=pl.contact_type 
     ) 

    select person_number 
          ,listagg(contact_names,',') 
           WITHIN GROUP (ORDER BY priority) contact_name  
      from cte 
    group by person_number
    fetch first 5 rows only

1 个答案:

答案 0 :(得分:4)

一种方法是编辑CTE,通过添加一些空行来至少提供所需的行数或行数(在您的示例中为5)。

在您的情况下,考虑到您需要构建字符串,我将简单地将构建字符串的方式编辑为:

listagg(contact_names,',') WITHIN GROUP (ORDER BY priority)
|| rpad(',', 5 - count(*), ',')  contact_name