在单行中选择结果

11 浏览
0 Comments

在单行中选择结果

我正在尝试以单行逗号分隔的方式显示表中所有列的名称,并将它们保存在一个变量中。

哪种方法是最好的?

我有类似于这样的东西:

SELECT tab.column_name || decode(lead(tab.column_name,1) over (order by tab.column_id),null,'',',')
FROM
    all_tab_columns tab,
    all_constraints pk,
    all_cons_columns pk_det
WHERE
    tab.table_name = pk.table_name (+)
    and pk.table_name = pk_det.table_name (+)
    and tab.owner = pk.owner (+)
    and pk.owner = pk_det.owner (+)
    and pk.constraint_name = pk_det.constraint_name (+)
    and tab.column_name = pk_det.column_name (+)
    and tab.data_type not like '%LOB%'
    and tab.owner = :OWNER_SOURCE
    and tab.table_name = :TABLE_NAME_SOURCE

结果是这样的:

ID,
_LOCALE,
LABEL,
OBSERVATIONS

但是...我需要这样的方式:

ID,_LOCALE,LABEL,OBSERVATIONS

提前感谢。

0
0 Comments

问题:从上述代码可以看出,问题是如何将多行结果合并为一行结果。

原因:通过使用SELECT语句,可以从表中检索多行结果。然而,有时候我们需要将这些多行结果合并为一行结果,以便更方便地处理和展示数据。

解决方法:可以使用字符串函数来实现多行结果合并为一行结果。在上述代码中,使用了SUBSTRING函数来进行字符串拼接。首先通过SELECT语句查询多行结果,然后使用FOR XML PATH('')将结果以XML格式返回,并通过字符串拼接将每个结果行连接起来。最后,使用SUBSTRING函数去掉结果中的第一个逗号和空格。

另外,在代码中还提到了另一种解决方法,即使用LISTAGG函数。LISTAGG函数是Oracle数据库中的一个字符串聚合函数,可以将多行结果合并为一个字符串,并以指定的分隔符进行分隔。

通过使用SUBSTRING函数或LISTAGG函数,可以将多行结果合并为一行结果,从而更方便地处理和展示数据。

0