在带有行值的sql select语句中追加行号

时间:2012-11-03 15:20:26

标签: sql oracle

我试图将选择的陈述结果连接成一行 例如: 对于此select语句输出:

Name  
ABC  
DEF  
GHI

我需要关注输出:
姓名

1 ABC, 2 DEF, 3 GHI  

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

2 个答案:

答案 0 :(得分:3)

听起来你想要类似的东西。 Oracle {11}中提供了listagg()函数:

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

答案 1 :(得分: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不是来自主表。