我正在尝试将 select 语句结果连接成一行。
例如:对于这个选择语句输出:
Name
ABC
DEF
GHI
我需要以下输出:
名称
1 ABC, 2 DEF, 3 GHI
(意味着行号应该附加在每行的前面)
我正在使用 wm_concat() 函数,但它给了我以下 o/p :ABC,DEF,GHI
有人可以帮忙吗?
听起来你想要类似的东西。该listagg()
功能在 Oracle 11g+ 中可用:
select listagg(cast(rownum as varchar2(20))||' '|| name, ', ')
within group (order by name) name
from yourtable
结果:
| NAME |
-----------------------
| 1 ABC, 2 DEF, 3 GHI |
如果您没有 Oracle 11g,那么您可以使用wm_concat()
:
select wm_concat(cast(rownum as varchar2(20))||' '|| name) name
from yourtable
另外,您可以使用 WITH 子句:
WITH tmp AS
(
:your_select_statement
)
SELECT
LISTAGG(rownum || ' ' || :your_column, ', ')
WITHIN GROUP (ORDER BY :your_column) tmp
FROM tmp;
然后 rownum 来自 tmp 临时表,其结果为 :your_select_statement 而不是来自主表。