各位大侠
我有这样的想法,不知道用sql语句如何在oracle实现
表的结构已经是定义好的,不能修改了。举例如下
Tbl(....,itemno,name,....)
---------------------------------------
... A11111,Name11 ...
... A11111,Name12 ...
... A11111,Name13 ...
... A22222,Name21 ...
... A22222,Name22 ...itemno和name 都不是主健,而且itemno是用来外连接的,所以,我想得到唯一一行itemno数据,同时也不想丢失name数据。
我想得到的结果就是 把name 信息都存放在一起显示。
"A11111","Name11 Name12 Name13"
"A22222","Name21 Name22"
可是不知道如何能够用sql语句实现。急需帮助!!!!
我有这样的想法,不知道用sql语句如何在oracle实现
表的结构已经是定义好的,不能修改了。举例如下
Tbl(....,itemno,name,....)
---------------------------------------
... A11111,Name11 ...
... A11111,Name12 ...
... A11111,Name13 ...
... A22222,Name21 ...
... A22222,Name22 ...itemno和name 都不是主健,而且itemno是用来外连接的,所以,我想得到唯一一行itemno数据,同时也不想丢失name数据。
我想得到的结果就是 把name 信息都存放在一起显示。
"A11111","Name11 Name12 Name13"
"A22222","Name21 Name22"
可是不知道如何能够用sql语句实现。急需帮助!!!!
select itemno, WMSYS.WM_CONCAT(name) name
from tbl
group by itemno
你可以这样
select itemno, replace(WMSYS.WM_CONCAT(name),',',' ') name
from tbl
group by itemno
from (select a.*,row_number()over(partition itemno name order by name) rn from a )
group by itemno
start with rn=1
connect by rn-1=prior rn and itemno=prior itemno
10G以下可以用这方法,
不过可能语句有点小错误,需要调试下
MY god.
可惜我用的不是10G.
不过这两个方法我都是抄来的
我看得有点乱
select substr(max(sys_connect_by_path(name,' ')),2) id,name
from (select a.*,row_number()over(partition itemno name order by name) rn from a )
group by itemno
start with rn=1
connect by rn-1=prior rn and itemno=prior itemno a: table name
name: tbl 中的name 字段??我依据这样的格式,提示sys_connect_by_path 参数不对。
from (select a.*,row_number()over(partition itemno name order by name) rn from a )
group by itemno
start with rn=1
connect by rn-1=prior rn and itemno=prior itemno
上面有点错误,红字部分改一下
第一层SQL,通过row_number来生成树结构
第二层来遍历树,用sys_connect_by_path生成树路径
再取最长的路径名,把最前的空格滤掉
sys_connect_by_path(name,' ')表示用空格来连接各路径,最前面也会加上的,所以最后输出要滤掉最前面的
之所以用substr,而不用trim滤空格,是为了通用性
因为这里是用空格来连接各路径有,有些会用,或者>
比如用>
sys_connect_by_path(name,'> ')
出来就是
>Name11>Name12>Name13