我试图在一行中连接选择语句结果。
对于例如: 对于此选择语句输出:在具有行值的sql select语句中追加行号
Name
ABC
DEF
GHI
我需要以下输出:
名称
1 ABC, 2 DEF, 3 GHI
(平均值行数应在前面所附的每一行)
我我使用wm_concat()函数,但它给了我下面的O/P:ABC,DEF,GHI
任何人都可以帮忙吗?
我试图在一行中连接选择语句结果。
对于例如: 对于此选择语句输出:在具有行值的sql 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的结果不是来自主表。
LISTAGG()仅在Oracle 11r2之后可用。 – APC
@apc正确他们没有指定版本。如果不是oracle 11g,那么可以使用wm_concat()。 – Taryn