表内容:name km cj
张三 yw 81
张三 sx 82
张三 yy 83
张三 wl 84
张三 hx 85
李四 yw 71
李四 sx 72
李四 yy 73
李四 wl 74其中 km 是动态的,可能还有dl,sw......希望得到结果:
name yw sx yy wl hx
张三 81 82 83 84 85
李四 81 82 83 84 0多谢!
张三 yw 81
张三 sx 82
张三 yy 83
张三 wl 84
张三 hx 85
李四 yw 71
李四 sx 72
李四 yy 73
李四 wl 74其中 km 是动态的,可能还有dl,sw......希望得到结果:
name yw sx yy wl hx
张三 81 82 83 84 85
李四 81 82 83 84 0多谢!
解决方案 »
- 有时会出现: ADODB.Recordset (0x800A0E78)对象关闭时不允许操作的错误
- 请教两个查询
- 日期问题
- 一个简单的查询语句,行列问题!??
- 我用ODBC操作ORACLE数据库,数据库操作有时一直没反映,不知是死锁还是什么其它原因?????????????
- 事务是否可以嵌套?
- 求助,请进来看看
- oracle的数据库表结构导出
- XP下可以装ORACLE8i企业版吗?
- 请教个简单问题。我怎么用Sql命令得到我建立的存储过程的名字,又怎么参看某个存储过程呢?谢谢
- 这个SQL怎么写?(子查询建虚拟表)
- 学学oracle ,java。 准备配台电脑,主机预算4300以下,麻烦各位推荐一下配置,谢谢
論壇裡以前有相同的提問
以前的那个找了很就没有找到。
另外我的数据库是oracle 9i。
2 cursor ub is select km from zhang.test2 group by km;
3 sql_command varchar2(2000);
4 begin
5 sql_command:='select name';
6 for tab in ub loop
7 sql_command:=sql_command||', max(decode(km, '''||tab.km||''', cj, 0)) '||tab.km;
8 end loop;
9 sql_command:=sql_command||' from zhang.test2 group by name';
10 dbms_output.put_line(sql_command);
11 return sql_command;
12 end;
13 /Function created.zhang@zhang>variable c varchar2(2000);
zhang@zhang>execute :c:= f_sql;
select name, max(decode(km, 'hx', cj, 0)) hx, max(decode(km, 'sx', cj, 0)) sx, max(decode(km, 'wl',
'yw', cj, 0)) yw, max(decode(km, 'yy', cj, 0)) yy from zhang.test2 group by namePL/SQL procedure successfully completed.zhang@zhang>select name, max(decode(km, 'hx', cj, 0)) hx, max(decode(km, 'sx', cj, 0)) sx,
2 max(decode(km, 'wl','yw', cj, 0)) yw, max(decode(km, 'yy', cj, 0)) yy from zhang.test2 group by
name;NAME HX SX YW YY
-------------------- ---------- ---------- -- ----------
李四 0 72 yw 73
张三 85 82 yw 83
zhang@zhang>select name, max(decode(km, 'hx', cj, 0)) hx, max(decode(km, 'sx', cj, 0)) sx, max(decod
e(km, 'wl',cj, 0)) yw, max(decode(km, 'yy', cj, 0)) yy from zhang.test2 group by name;NAME HX SX YW YY
-------------------- ---------- ---------- ---------- ----------
李四 0 72 74 73
张三 85 82 84 83函数
create or replace function f_sql return varchar2 is
cursor ub is select km from zhang.test2 group by km;
sql_command varchar2(2000);
begin
sql_command:='select name';
for tab in ub loop
sql_command:=sql_command||', max(decode(km, '''||tab.km||''', cj, 0)) '||tab.km;
end loop;
sql_command:=sql_command||' from zhang.test2 group by name';
dbms_output.put_line(sql_command);
return sql_command;
end;
在pl/sql中执行;
谢谢!
怎么去运行它;多谢!
我是想
<Query>
<![CDATA[
create or replace function f_sql return varchar2 is
cursor ub is select km from test group by km;
sql_command varchar2(2000);
begin
sql_command:='select name';
for tab in ub loop
sql_command:=sql_command||', max(decode(km, '''||tab.km||''', cj, 0)) '||tab.km;
end loop;
sql_command:=sql_command||' from test group by name';
dbms_output.put_line(sql_command);
return sql_command;
end;
variable a varchar2(2000);
execute :a :=f_sql;
print :a;
]]>
</Query>但处理不成功;你说这样写可以么?谢谢!
create or replace function f_sql return varchar2 is
cursor ub is select km from test group by km;
sql_command varchar2(2000);
begin
sql_command:='select name';
for tab in ub loop
sql_command:=sql_command||', max(decode(km, '''||tab.km||''', cj, 0)) '||tab.km;
end loop;
sql_command:=sql_command||' from test group by name';
dbms_output.put_line(sql_command);
return sql_command;
end;
variable a varchar2(2000);
execute :a :=f_sql;
print :a;当作一个sql进行处理;
不知道行不行,谢谢了!
或者建立一个表保存 SQL语句的结果数据 把程序该一下create or replace function f_sql return varchar2 is
cursor ub is select km from test group by km;
sql_command varchar2(2000);
begin
execute immediate 'drop table test_2';
sql_command:='select name';
for tab in ub loop
sql_command:=sql_command||', max(decode(km, '''||tab.km||''', cj, 0)) '||tab.km;
end loop;
sql_command:=sql_command||' from test group by name';
dbms_output.put_line(sql_command);
execute immediate'create table test_2 as '||sql_command;
return sql_command;
end;函数执行完后
select * from test_2