Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将查询结果合并为一行_Sql_Sql Server_Oracle - Fatal编程技术网

Sql 将查询结果合并为一行

Sql 将查询结果合并为一行,sql,sql-server,oracle,Sql,Sql Server,Oracle,我有sql查询,结果数据如下 Name | City ------------------- Frank | London Sebastian | New York Frank;London;Sebastian;New York 我想把结果合并成一行和一列,就像这样 Name | City ------------------- Frank | London Sebastian | New York Frank;London;Se

我有sql查询,结果数据如下

Name        | City
-------------------
Frank       | London
Sebastian   | New York
Frank;London;Sebastian;New York
我想把结果合并成一行和一列,就像这样

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

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

在SQL Server中,应执行以下操作:

SELECT ';'+rtrim(Name)+';'+rtrim(City)
FROM Table
FOR XML PATH('') 
在oracle中,您没有XML路径(“”)语法,但可以连接这样的字段,例如:

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 
干杯

你可以做:

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

这是给甲骨文的吗

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

您可以发布获取该数据的查询吗?这将违反许多SQL最佳实践。这是一种代码气味。或者你想用什么术语来形容“你可能根本不想这么做”。您的技术要求背后的目的是什么?如果您解释为什么要这样做,如何使用它,我们可能会提供一个替代方案,和/或详细的例子说明为什么这是一个坏主意…@MatBailie。谢谢。是的,很有效,谢谢。最后我也找到了这个问题。在Oracle查询中有这样的查询方法吗?有没有方法可以在Oracle查询中使用XML PATH(“”)这样的语法?我修改了答案,甚至包括了Oracle DB