2017-09-07 207 views
-3

我有一个表看起来像这样:集合结果

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

你到目前为止尝试过什么?为什么它不工作?请[编辑]问题来描述你遇到的问题这不是一个代码写作服务! – amon

回答

0

对于ORA-01489,您可以使用XMLAGG作为解决办法按本answer

一种解决方法

带提取物

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 
    ) 
+0

您仅混合使用小写字母和混合大小写变量名称很奇怪。你应该决定一种类型并保持一致。在Perl中的惯例是使用像'$ query_db'这样的蛇情况。 – simbabque

+0

我只是想知道为什么我会为答案返回预期结果,而不会从另一个链接返回正确答案的复制粘贴解决方案会被接受... –

-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 
+0

Stragg不是标准的oracle函数。看到这个问题:https://stackoverflow.com/questions/37340183/stragg-in-oracle-database-11g-enterprise-edition-release-11-2-0-4-0-64bit-prod – Rene

+1

LISTAGG似乎工作! 但是我得到的错误:( ORA-01489:字符串连接的结果是太长 我想这是因为我有甲骨文11.2 有什么办法避免这种错误 THX –

+0

@amanssan看到张贴的链接? rene –