如下:
table Aid name classid age add type money
1 张三 1 10 北京市 1 2
2 李四 1 11 河北 2 1
3 张五 2 12 河南 1 1
4 李六 1 11 河北 1 10
5 张三 1 10 北京市 2 2
6 李四 1 11 河北 1 10
7 张三 1 10 北京市 2 6
classid name
1 1班
2 2班
3 3班type
1 一级积分
2 二级积分
结果:
id name classid age add level1 level2
1 张三 1 10 北京市 2 8
2 李四 1 11 河北 10 1
3 李六 1 11 河北 10 0如上:从A表中查询得到1班的所有人的数据,如果级别相同的数据有多个,那么级别上的money字段值相加和,如果没有就为0,type 就两种:1与2
sum(case type when 1 then money else 0 end) level1,
sum(case type when 2 then money else 0 end) level2
from A
group by name;
sum(case type when 1 then money else 0 end) level1,
sum(case type when 2 then money else 0 end) level2
from A
where classid='1'
group by name;
name,classid,age,add,
这些不在group中,你这样写是错误的吧?
id name classid age add level1 level2
1 张三 1 10 北京市 2 8
2 李四 1 11 河北 10 1
3 李六 1 11 河北 10 0 level1 level2 看不出来什么规律
from(
select a.id,a.name,a.classid,a.age,a.addl,a.type,decode(a.type,1,money,0) level1, decode(a.type,2,money,0) level2 from ta a,tclass b,ttype c
where a.classid=b.id
and a.type=c.id)
where classid=1
group by name,classid,age,addl
insert into ta values(2, '李四', 1, 11, '河北', 2, 1);
insert into ta values(3, '张五', 2, 12, '河南', 1, 1);
insert into ta values(4, '李六', 1, 11, '河北', 1, 10);
insert into ta values(5, '张三', 1, 10, '北京市', 2, 2);
insert into ta values(6, '李四', 1, 11, '河北', 1, 10);
insert into ta values(7, '张三', 1, 10, '北京市', 2, 6); create table tclass(id int,name varchar2(10));
insert into tclass values(1,'1班');
insert into tclass values(2,'2班');
insert into tclass values(3,'3班');create table ttype(id integer,type varchar2(10));
insert into ttype values(1,'一级积分');
insert into ttype values(2,'二级积分');
select name,classid,age,addl,sum(level1) level1,sum(level2) level2
from(
select a.id,a.name,a.classid,a.age,a.addl,a.type,decode(a.type,1,money,0) level1, decode(a.type,2,money,0) level2 from ta a,tclass b,ttype c
where a.classid=b.id
and a.type=c.id)
where classid=1
group by name,classid,age,addl
order by name desc1 张三 1 10 北京市 2 8
2 李四 1 11 河北 10 1
3 李六 1 11 河北 10 0