SQL将所有查询行合并为一行

时间:2019-05-03 09:17:53

标签: sql oracle oracle11g

我已经看到以下问题,但无法让它们满足我的需求。

How can multiple rows be concatenated into one in Oracle without creating a stored procedure?

SQL Query to concatenate column values from multiple rows in Oracle

我正在使用Oracle,希望该解决方案没有pl-Sql。

我正在尝试使查询看起来像这样,每行可能有一个新行,并以|分隔。或逗号:

数据集:

question_id    element_message    date
--------------------------------------------
1              hello              10/10/19
2              goodbye            11/11/19

所需的一行查询结果:

1 | hello  | 10/10/19 --new line added in query(if possible)
2 | goodbye| 11/11/19

如果无法在查询中添加新行:

所需结果:

1 | hello  | 10/10/19 | 2 | goodbye| 11/11/19 |

*编辑 为了澄清为什么我使用这个。我正在使用名为Geneos的工具,它在触发电子邮件方面具有逐行限制。因此,这是一种骇客行为,可每天触发所有行的一封电子邮件。

3 个答案:

答案 0 :(得分:1)

如果希望将每一行打印在不同的行上,为什么要查询一行?

如果您只想运行一个查询,该查询返回没有标题或页面分隔符的数据,请使用以下命令:

set pagesize 0
select  question_id || '|' || element_message || '|' || date from your_table;

答案 1 :(得分:1)

SQL Server解决方案:您可以使用 self join 来解决它,如下所示:

select top 1 CONCAT(d1.question_id, ' | ', d1.element_message, ' | ', d1.date, 
'|' d2.question_id, ' | ', d2.element_message, ' | ', d2.date) 
from data d1 join data d2 on (d1.question_id < d2.question_id and)

答案 2 :(得分:0)

这是您要找的吗?

SELECT CONCAT(question_id, ' | ', element_message, ' | ', date) FROM Data