我搜索了以往的帖子,发现以下方法是我需要的,就请问
declare @sql varchar(8000)
set @sql = 'select name'
select @sql = @sql + ',sum(case km when '''+km+''' then cj end) ['+km+']'
from (select distinct km from test) as a
select @sql = @sql+' from test group by name'
exec(@sql)
这段话是放在什么地方执行的?我在sql plus 里面执行不过去,请大虾指教。谢谢诸位了!方法如下:纵转换为横。
有表:test(name char(10),km char(10),cj int)
name km cj
----------------------------------------------
张三 语文 80
张三 数学 86
张三 英语 75
李四 语文 78
李四 数学 85
李四 英语 78要求以横向格式显示,即:
想变成姓名 语文 数学 英语
----------------------------
张三 80 86 75
李四 78 85 78Create table test (name char(10),km char(10),cj int)
go
insert test values('张三','语文',80)
insert test values('张三','数学',86)
insert test values('张三','英语',75)
insert test values('李四','语文',78)
insert test values('李四','数学',85)
insert test values('李四','英语',78)
方法:
declare @sql varchar(8000)
set @sql = 'select name'
select @sql = @sql + ',sum(case km when '''+km+''' then cj end) ['+km+']'
from (select distinct km from test) as a
select @sql = @sql+' from test group by name'
exec(@sql)
declare @sql varchar(8000)
set @sql = 'select name'
select @sql = @sql + ',sum(case km when '''+km+''' then cj end) ['+km+']'
from (select distinct km from test) as a
select @sql = @sql+' from test group by name'
exec(@sql)
这段话是放在什么地方执行的?我在sql plus 里面执行不过去,请大虾指教。谢谢诸位了!方法如下:纵转换为横。
有表:test(name char(10),km char(10),cj int)
name km cj
----------------------------------------------
张三 语文 80
张三 数学 86
张三 英语 75
李四 语文 78
李四 数学 85
李四 英语 78要求以横向格式显示,即:
想变成姓名 语文 数学 英语
----------------------------
张三 80 86 75
李四 78 85 78Create table test (name char(10),km char(10),cj int)
go
insert test values('张三','语文',80)
insert test values('张三','数学',86)
insert test values('张三','英语',75)
insert test values('李四','语文',78)
insert test values('李四','数学',85)
insert test values('李四','英语',78)
方法:
declare @sql varchar(8000)
set @sql = 'select name'
select @sql = @sql + ',sum(case km when '''+km+''' then cj end) ['+km+']'
from (select distinct km from test) as a
select @sql = @sql+' from test group by name'
exec(@sql)
----------------------------------------------------------------------------------------------------------------------------
create table test (name varchar2(10),km varchar2(10),cj numeric);
insert test values('张三','语文',80);
insert test values('张三','数学',86);
insert test values('张三','英语',75);
insert test values('李四','语文',78);
insert test values('李四','数学',85);
insert test values('李四','英语',78);--测试
declare col1 test.km%type; --定义类型
sqlstr varchar2(8000);
cursor c_try is select distinct km from test;
begin
sqlstr:='';
open c_try;
loop
fetch c_try into col1;
exit when c_try%notfound;
sqlstr:=sqlstr||', max(decode(km,'''||col1||''',cj,0)) as '||col1;
exit when c_try%notfound;
end loop;
close c_try;
sqlstr:='create table tt as select 姓名'||sqlstr||' from test group by 姓名';
--tt为刚创建的一个保存结果的表
execute immediate sqlstr;
end;--执行
select * from tt;