首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

请问一查询语句写法

2012-01-11 
请教一查询语句写法表结构:createtableTBL_TEST(TIDVARCHAR2(2),NMVARCHAR2(2))表数据:insertintoTBL_TEST

请教一查询语句写法
表结构:
create   table   TBL_TEST   (TID   VARCHAR2(2),   NM     VARCHAR2(2))
表数据:
insert   into   TBL_TEST2   (TID,   NM)   values   ( '1 ',   'a ');
insert   into   TBL_TEST2   (TID,   NM)   values   ( '2 ',   'b ');
insert   into   TBL_TEST2   (TID,   NM)   values   ( '3 ',   'c ');
insert   into   TBL_TEST2   (TID,   NM)   values   ( '1 ',   'd ');
即为:
TIDNM
1a
2b
3c
1d
----------------------
现在想要得出下面的集合该怎么写:
TIDNM
1ad
2b
3c
----------------------
即:按TID分类,如果TID一样则num列字符串并在一起(不是sum)
注:TID、NM中的值是不固定的
我想了半天想不出来,只好找大家帮忙了

[解决办法]
CREATE OR REPLACE function link(v_id varchar2)
return varchar2
is
union_nm varchar2(200);
begin
for cur in (select nm from TBL_TEST where tid=v_id) loop
union_nm := union_nm||cur.nm;
end loop;
union_nm := rtrim(union_nm,1);
return union_nm;
end;
///
select tid,link(tid) from tbl_test group by tid
[解决办法]
select tid, replace(max(sys_connect_by_path(nm, ', ')), ', ', ' ') from
(SELECT tid, nm, MIN(nm) over(PARTITION BY tid) minnm
,(row_number() over(ORDER BY tid, nm)) + (dense_rank() over(ORDER BY tid)) no
FROM ttt)
start with nm=minnm
connect by no-1 = prior no
group by tid
[解决办法]
使用这个sys_connect_by_path就可以了
[解决办法]
具体范例参照:
http://hitc.blogdriver.com/hitc/465373.html

热点排行