现在两表如下:
A
ID name
1 张三
2 李四
B
ID AID Name Value
1 1 身高 170
2 1 体重 50
3 2 年龄 24现要得到视图C
ID Name 身高 体重 年龄
1 张三 170 50
2 李四 24其中B中是不定行的。 可能还有不定数量的记录请教要产生这样的行转列视图应该怎么做?
求高手帮忙,谢谢
A
ID name
1 张三
2 李四
B
ID AID Name Value
1 1 身高 170
2 1 体重 50
3 2 年龄 24现要得到视图C
ID Name 身高 体重 年龄
1 张三 170 50
2 李四 24其中B中是不定行的。 可能还有不定数量的记录请教要产生这样的行转列视图应该怎么做?
求高手帮忙,谢谢
select a.id,a.name,
sum(case when b.Name = '身高' then b.Value else null end) as 身高
sum(case when b.Name = '体重' then b.value else null end) as 体重
sum(case when b.Name = '年龄' then b.Value else null end) as 年龄
--
from a,b
where a.id = b.aid(+)
http://blog.csdn.net/daviszr_1979/archive/2007/12/14/1936318.aspx
行转列分类总结
新一篇: div和span概念和区别1 分类: 1.1 静态行转列:1 使用Case When;2 转成列的行固定写好的。 1.2 动态行转列:1 使用Case When;2 转成列的行是通过查询动态生成的。2 动态行转列的步骤: 2.1 定义Sql变量 2.2 确定分组列,赋给Sql变量。 2.3 拼接行转列部分Sql语句。 2.3.1 确定行转列的范围(Sql查询语句) 2.3.2 拼接行转列生成的数据。 2.4 添加分组条件。 2.5 执行行转列的结果。
create or replace procedure test
is
aa tb_b.Name%type;
bb varchar2(32767);
cursor cc is select distinct Name from tb_b;
begin
bb:='';
open cc;
loop
fetch cc into aa;
exit when cc%notfound;
bb:=bb||',sum(decode(Name,'''||aa||''',Value,0)) as '||aa;
exit when cc%notfound;
end loop;
close cc;
bb:='create view v_test as select tb_a.ID,tb_a.name'||bb||' from tb_b,tb_a where tb_a.id = tb_b.aid group by tb_a.ID,tb_a.name';
--v_test为创建的一个保存结果的视图
execute immediate bb;end;
aa tb_b.Name%type;
bb varchar2(32767);
cursor cc is
select distinct Name from tb_b;
begin
bb := '';
open cc;
loop
fetch cc
into aa;
exit when cc%notfound;
bb := bb || ',sum(decode(Name,''' || aa || ''',Value,0)) as ' || aa;
exit when cc%notfound;
end loop;
close cc;
bb := 'create view v_test as select tb_a.ID,tb_a.name' || bb ||
' from tb_b,tb_a where tb_a.id = tb_b.aid group by tb_a.ID,tb_a.name';
--v_test为创建的一个保存结果的视图
execute immediate bb;
-- end;end;