请教一个Oracle SQL语句的写法

来源:百度知道 编辑:UC知道 时间:2024/06/22 01:31:20
Oracle
有一表中有如下字段.
编号
物品名称
用途

sql语句怎样才能查询把编号相同的显示一条信息,其它字段用逗号隔开显示

编号 物品名称 用途

编号1 物品名称1,物品名称2,物品名称3 用途1,用途2,用途3
物品名称不定哦。 不用豆号隔开也可以。直接放一起显示,有没有办法一条查询语句解决。因为只有查询权限

四毛大哥 你太强大了。可以实现,不过能否解析一下。看不懂。

一条sql搞定

select citizenid_number,ltrim(max(sys_connect_by_path(name,',')),',') from(
select citizenid_number,name,row_number() over(partition by citizenid_number order by citizenid_number) citizenid_number1,
row_number() over(order by citizenid_number) + dense_rank() over(order by citizenid_number) citizenid_number2
from 表
)
start with citizenid_number1=1 connect by prior citizenid_number2 = citizenid_number2 -1
group by citizenid_number order by citizenid_number;

你的编号对应 citizenid_number
物品名称对应name
没写用途名称 自己研究加上就是了

问一下,所有编号的物品名称都是三个么?所有编号的用途都是三个么?
要是不都是三个的话,一个sql可能搞定不了了,得用游标

1、创建一个临时表,结构就是返回的结果(编号 物品名称 用途)
2、创建一个游标,查询一个表,并按照编号group by一下
3、一条记录一条记录的遍历编号是否相同,如果相同的,则把物品名写入一个临时变量@物品名串 中,进行累加,用途一样处理,遇到编号不同了,就把@物品名串和@用途串写入到1中创建的临时表@temp中。并清空@物品名='',@用途串='',如此循环处理,最后 select * from @temp,就可以了。
期待其他更好的办法,
我也不赞成使用游标,因为那样处理,性能低。