2012-11-03 29 views
3

我试图在一行中连接选择语句结果。
对于例如: 对于此选择语句输出:在具有行值的sql select语句中追加行号

Name 
ABC 
DEF 
GHI 

我需要以下输出:
名称

1 ABC, 2 DEF, 3 GHI 

(平均值行数应在前面所附的每一行)
我我使用wm_concat()函数,但它给了我下面的O/P:ABC,DEF,GHI
任何人都可以帮忙吗?

回答

3

这听起来像你想要类似的东西。该listagg()功能是在Oracle 11g中+可供选择:

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

SQL Fiddle with Demo

结果:

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

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

select wm_concat(cast(rownum as varchar2(20))||' '|| name) name 
from yourtable 
+0

LISTAGG()仅在Oracle 11r2之后可用。 – APC

+0

@apc正确他们没有指定版本。如果不是oracle 11g,那么可以使用wm_concat()。 – Taryn

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的结果不是来自主表。