来自Oracle请求的聚合结果

时间:2017-09-07 06:23:03

标签: sql oracle

我的桌子看起来像这样:

Table: table_name

name   priority    day       hour
-------------------------------------
name1     1       monday     21:00
name2     3       tuesday    21:00
name3     1       monday     21:00
name4     2       monday     21:00
name5     2       sunday     22:00
name6     1       sunday     23:00
name7     1       thursday   00:00
name8     2       sunday     22:00

有人知道如何处理请求,然后操纵结果以汇总结果如下(当然没有列标题):

priority    day       hour          name
-----------------------------------------------
   1       monday     21:00      name1,name3
   3       tuesday    21:00         name2
   2       monday     21:00         name4
   2       sunday     22:00      name5,name8
   1       sunday     23:00         name6
   1       thursday   00:00         name7

我希望按优先级小时进行分组。

优先级可以是1到5 显然可以是周一至周日 小时显然可以是任何时间:) 名称可以是任何内容。

最后,我需要一个SQL查询来将格式化的结果写入文件。

2 个答案:

答案 0 :(得分:0)

作为ORA-01489的解决方法,您可以根据此answer

使用XMLAGG作为解决方法

with extract

 SET LONG 2000000
 SET pagesize 50000
 SELECT rtrim(xmlagg(XMLELEMENT(e,text,',').EXTRACT('//text()')
                     ).GetClobVal(),',') very_long_text
  FROM
   (SELECT to_char(to_date(level,'j'), 'jsp') text FROM dual CONNECT BY LEVEL < 250
    )

答案 1 :(得分:-1)

STRAGG可能很有用

SELECT priority, day, hour, stragg(name)
FROM table_name
GROUP BY priority, day, hour

如果不够,请使用LISTAGG

SELECT priority, day, hour, LISTAGG(name, ',') WITHIN GROUP (ORDER BY name)
FROM table_name
GROUP BY priority, day, hour