3

我正在尝试将 select 语句结果连接成一行。
例如:对于这个选择语句输出:

Name  
ABC  
DEF  
GHI

我需要以下输出:
名称

1 ABC, 2 DEF, 3 GHI  

(意味着行号应该附加在每行的前面)
我正在使用 wm_concat() 函数,但它给了我以下 o/p :ABC,DEF,GHI
有人可以帮忙吗?

4

2 回答 2

3

听起来你想要类似的东西。该listagg()功能在 Oracle 11g+ 中可用:

select listagg(cast(rownum as varchar2(20))||' '|| name, ', ') 
        within group (order by name) name
from yourtable

请参阅带有演示的 SQL Fiddle

结果:

|                NAME |
-----------------------
| 1 ABC, 2 DEF, 3 GHI |

如果您没有 Oracle 11g,那么您可以使用wm_concat()

select wm_concat(cast(rownum as varchar2(20))||' '|| name) name
from yourtable
于 2012-11-03T15:28:56.540 回答
0

另外,您可以使用 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 而不是来自主表。

于 2012-11-03T16:00:08.773 回答