将查询结果合并为单行

时间:2018-07-24 15:56:06

标签: sql sql-server oracle

我有sql查询结果像这样的数据

Name        | City
-------------------
Frank       | London
Sebastian   | New York

我想将结果合并成这样的单个行和列

Frank;London;Sebastian;New York

如何解决此查询问题?之前谢谢

4 个答案:

答案 0 :(得分:0)

默认情况下,SSMS以网格格式打印结果。选项之一是将结果打印为文本。单击菜单上的此按钮或按快捷方式“ CTRL + T”。默认情况下,这将打印制表符分隔的结果,而不是所需的分号分隔的结果。可以从“查询”->“查询选项”->“结果”->“文本”->“输出格式”菜单中进行更改,也可以通过在文本编辑器(如“记事本”)中使用“ CTRL + H”查找并用分号替换所有选项卡。

答案 1 :(得分:0)

在应该执行此工作的SQL Server中:

SELECT ';'+rtrim(Name)+';'+rtrim(City)
FROM Table
FOR XML PATH('') 

在oracle中,您没有XML PATH('')语法,但是可以将类似的字段连接起来,例如:

SELECT ';' || WM_CONCAT(name||';'||City) AS Result
FROM   table

请注意,在Oracle 12c中不建议使用WM_CONCAT,但是您可以使用ListaAgg

SELECT LISTAGG(Name||City,';') WITHIN GROUP(ORDER BY aColumn DESC) FROM TABLE 

欢呼

答案 2 :(得分:0)

您可以:

select stuff ( (select distinct ';'+t1.col2
                from table t cross apply
                     ( values (name), (city) ) t1 (col2)
                for xml path ('')
               ), 1, 1, ''
             ) ;

答案 3 :(得分:0)

这可能是Oracle的一个吗?

WITH tmp AS
(
  SELECT 'Frank' Name, 'London' City FROM dual 
  UNION
  SELECT 'Sebastian', 'New York' FROM dual
)
SELECT LISTAGG(name||';'||city, '; ') WITHIN GROUP(ORDER BY null) FROM tmp