用行值追加sql select语句中的行号
我正在尝试将select STATTION结果连接到一行。用行值追加sql select语句中的行号,sql,oracle,Sql,Oracle,我正在尝试将select STATTION结果连接到一行。 例如: 对于此select语句输出: Name ABC DEF GHI 我需要以下输出: 名字 (意味着每行的行号应追加在前面) 我正在使用wm_concat()函数,但它给了我以下o/p:ABC、DEF、GHI 有人能帮忙吗?听起来你想要类似的东西。Oracle 11g+中提供了listag()函数: select listagg(cast(rownum as varchar2(20))||' '|| name, ',
例如: 对于此select语句输出:
Name
ABC
DEF
GHI
我需要以下输出:名字 (意味着每行的行号应追加在前面)
我正在使用wm_concat()函数,但它给了我以下o/p:
ABC、DEF、GHI
有人能帮忙吗?听起来你想要类似的东西。Oracle 11g+中提供了
listag()
函数:
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()
:
此外,您还可以使用WITH子句:
WITH tmp AS
(
:your_select_statement
)
SELECT
LISTAGG(rownum || ' ' || :your_column, ', ')
WITHIN GROUP (ORDER BY :your_column) tmp
FROM tmp;
然后rownum来自tmp临时表,其结果是:您的\u select \u语句不是来自主表。Listag()仅在Oracle 11r2之后可用。@apc更正他们没有指定版本。如果不是oracle 11g,则可以使用wm_concat()。
select wm_concat(cast(rownum as varchar2(20))||' '|| name) name
from yourtable
WITH tmp AS
(
:your_select_statement
)
SELECT
LISTAGG(rownum || ' ' || :your_column, ', ')
WITHIN GROUP (ORDER BY :your_column) tmp
FROM tmp;