Sql 将查询结果合并为一行
我有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
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