Create table test (name char(10),km char(10),cj int)insert test values('张三','语文',80)
insert test values('张三','数学',86)
insert test values('张三','英语',75)
insert test values('李四','语文',78)
insert test values('李四','数学',85)
insert test values('李四','英语',78)想变成姓名 语文 数学 英语
张三 80 86 75
李四 78 85 78
其中KM列数不定,也就说课目是动态变化的解决方法:
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)
这种方式对我当前项目中使用不便,现在我想不用EXEC方式执行,想写成一条SQL语句执行,请大侠们帮帮我,为此我想了两天了!
insert test values('张三','数学',86)
insert test values('张三','英语',75)
insert test values('李四','语文',78)
insert test values('李四','数学',85)
insert test values('李四','英语',78)想变成姓名 语文 数学 英语
张三 80 86 75
李四 78 85 78
其中KM列数不定,也就说课目是动态变化的解决方法:
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)
这种方式对我当前项目中使用不便,现在我想不用EXEC方式执行,想写成一条SQL语句执行,请大侠们帮帮我,为此我想了两天了!
解决方案 »
- oracle sql与标准的sql语句的区别?
- Oracle 高人们,如何清楚库中某几张表内容?在线等!!!!
- 根据主键判定是insert还是update的问题
- 如何恢复oracle 数据库
- 紧急求救!我在网上下载了一个plsqldev.exe文件,安装之后。。。。。。
- PB中如何调用PL/SQL编写的函数?
- 请教一个最最简单的存储过程问题
- 问题,谢谢。
- Oracle的数据文件是不是.dbf?如果从其它机子拷了一个.dbf进来,放在oradata内,那么需执行什么命令才能在DBA Studio中看到这个新的数据
- 求教使用SQL查询不包含某字符的语句
- 请大家帮忙,求一条更新语句。我的是这样写的,谁还有最好的!
- 问一个关于date的sql语句
select name,
sum(decode(km,'语文',cj,0)),
sum(decode(km,'数学',cj,0)),
sum(decode(km,'英语',cj,0))
from test
group by name
into sales_info values (employee_id,week_id,sales_mon)
into sales_info values (employee_id,week_id,sales_tue)
into sales_info values (employee_id,week_id,sales_wed)
into sales_info values (employee_id,week_id,sales_thur)
into sales_info values (employee_id,week_id,sales_fri)
select employee_id,week_id,sales_mon,sales_tue,sales_wed,sales_thur,sales_fri
from sales_source_data;需要讲座的话,可以给你传.
cursor csr is
select distinct (km) from t;
tmp_km varchar2(6);
str varchar2(4000);
begin
str := 'select name';
open csr;
loop fetch csr into tmp_km;
exit when csr%notfound;
str := str || ',sum(decode(km,' || chr(39) || tmp_km || chr(39) ||
',cj,0)) ' || tmp_km;
end loop;
str := str || ' from t group by name';
dbms_output.put_line(str);
execute immediate str;
end;
课目是不定的,除了列出的课目,它可能还化学,物理等,其具体数目事先不知!
to zhpsam109(昊子鳖鳖 Jerry):
没有找到能我所要的SQL方法,大多与zlz_212()提供的方法差不多!
其实还有一点也很重要,就是你写的代码一定要有可读性.
insert into test1 values('张三','数学',86);
insert into test1 values('张三','英语',75);
insert into test1 values('李四','语文',78);
insert into test1 values('李四','数学',85);
insert into test1 values('李四','英语',78);
select name,
sum(decode(km,'语文',CJ,0)) 语文 ,
sum(decode(km,'数学',cj,0)) 数学,
sum(decode(km,'英语',cj,0)) 英语
from test1
group by name这样就是你想要的结果了
sum(decode(km,'语文',CJ,0)) 语文 ,
sum(decode(km,'数学',cj,0)) 数学,
sum(decode(km,'英语',cj,0)) 英语
from test1
group by name