求纵向表变横向表 (急)

[复制链接]
查看11 | 回复3 | 2006-9-6 10:13:10 | 显示全部楼层 |阅读模式
求纵向表变横向表

原先表:
id   ele   evalue
011     c    0.50
011     si    0.21
011     mn    0.25
011     s    0.25
012     c    0.24
012     mn    0.30
012     s    0.22
想得到如下结果:(ele 中的元素是动态改变的,根据id,ele生成横向
表)
id
c  si  mn s ...
011   0.50   0.21  0.250.25 ...
012   0.24   null   0.300.22 ...
回复

使用道具 举报

千问 | 2006-9-6 10:13:10 | 显示全部楼层
用关键字decode可实现
回复

使用道具 举报

千问 | 2006-9-6 10:13:10 | 显示全部楼层
decode不能实现 列数 的不确定性,写个存储过程返回一个游标是可以实现的,但可能不能满足楼主的愿望了
回复

使用道具 举报

千问 | 2006-9-6 10:13:10 | 显示全部楼层
仔细想了想,觉得用decode()函数可能不行。还是用pl/sql吧。下边是我收藏的itpub上的一篇帖子,你参考一下。
declare
cursor c1 is select a1,a2 from a order by a1;
v_a1 number := 0;
v_a2 varchar2(100) := null;
v_temp varchar2(100) := null;
v_lasta1 number := 0;
v_count number := 0;
begin
for r1 in c1 loop
v_a1 := r1.a1;
v_a2 := r1.a2;
v_count := v_count + 1;
if (v_count = 1) then
v_temp := v_a1 || ' '||v_a2;
else
if (v_a1 = v_lasta1) then
v_temp := v_temp || v_a2;
else
dbms_output.put_line(v_temp);
v_temp := v_a1 || ' '||v_a2;
end if;
end if;
v_lasta1 := v_a1;
end loop;
dbms_output.put_line(v_temp);
end;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行