Oracle 求助,统计全年的收入

fhuibo212 2012-02-28 02:46:05
现在小弟有一张表,如下:
ID year_month shouru bumen
00011 200601 3400.5 001
00011 200602 3412.3 001
00012 200703 2300 002

ID是员工的号码,shouru是该员工月份的收入,bumen是员工的部门代号
现在我要根据这张表重建一张新表,表如下:
ID year quannianshouru bumen
00011 2006 34000.43 001
00011 2007 35002.5 001
00012 2008 23680.7 002

新表只统计某一员工某年的全部收入(表中一共有2000年到2011年的数据),所以每个员工对应了11条数据。

谢谢各位高手帮忙,多谢
...全文
184 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
youqi1984 2012-02-28
  • 打赏
  • 举报
回复
select id, year_month/100 year, sum(shouru), bumen
from sa
group by id,year_month/100,bumen

其实上你的表sa 中 bumen冗余字段。
因为员工信息表中才应存在bumen



我心飞翔 2012-02-28
  • 打赏
  • 举报
回复
实测数据:

CREATE TABLE T138
(
ID VARCHAR2(20),
YearMonth INTEGER,
ShouRu NUMBER(10),
BuMen VARCHAR2(20)
);
INSERT INTO T138 VALUES('00011', 200601, 100, '001');
INSERT INTO T138 VALUES('00011', 200602, 200, '001');
INSERT INTO T138 VALUES('00011', 200603, 300, '001');

INSERT INTO T138 VALUES('00011', 200701, 1000, '001');
INSERT INTO T138 VALUES('00011', 200702, 2000, '001');
INSERT INTO T138 VALUES('00011', 200703, 3000, '001');

INSERT INTO T138 VALUES('00011', 200801, 10000, '001');
INSERT INTO T138 VALUES('00011', 200802, 20000, '001');
INSERT INTO T138 VALUES('00011', 200803, 30000, '001');

INSERT INTO T138 VALUES('00012', 200601, 1, '001');
INSERT INTO T138 VALUES('00012', 200602, 2, '001');
INSERT INTO T138 VALUES('00012', 200603, 3, '001');

INSERT INTO T138 VALUES('00012', 200701, 10, '001');
INSERT INTO T138 VALUES('00012', 200702, 20, '001');
INSERT INTO T138 VALUES('00012', 200703, 30, '001');

INSERT INTO T138 VALUES('00012', 200801, 100, '001');
INSERT INTO T138 VALUES('00012', 200802, 200, '001');
INSERT INTO T138 VALUES('00012', 200803, 300, '001');

INSERT INTO T138 VALUES('00013', 200601, 1000, '001');
INSERT INTO T138 VALUES('00013', 200602, 2000, '001');
INSERT INTO T138 VALUES('00013', 200603, 3000, '001');

INSERT INTO T138 VALUES('00013', 200701, 10000, '001');
INSERT INTO T138 VALUES('00013', 200702, 20000, '001');
INSERT INTO T138 VALUES('00013', 200703, 30000, '001');

INSERT INTO T138 VALUES('00013', 200801, 100000, '001');
INSERT INTO T138 VALUES('00013', 200802, 200000, '001');
INSERT INTO T138 VALUES('00013', 200803, 300000, '001');

实测结果:
coolkisses 2012-02-28
  • 打赏
  • 举报
回复
group by + substr 搞定,最多字段类型上考虑是否需要转换,其它没什么困难。
楼主还是要多看看语法。
  • 打赏
  • 举报
回复


select id, substr(year_month ,0,4) year, sum(shouru) shouru, bumen --红色部分求和统计
from sa
group by id,substr(year_month ,0,4),bumen--分组

--这个有什么需要解释的??
xpingping 2012-02-28
  • 打赏
  • 举报
回复
tb 你的表……
select ID, 
year2 ,
decode(year2,year1, quannianshouru ,0),
decode(year2,year1, bumen,'')
from(
select ID, t2.year year2 ,quannianshouru ,bumen ,t1.year year1 from
(select id, substr(year_month ,1,4) year, sum(shouru) quannianshouru , bumen
from tb
group by id,substr(year_month ,1,4),bumen)t1 ,
(select 20||lpad(rownum,2,'0') year from dual connect by rownum<=11)t2
)
fhuibo212 2012-02-28
  • 打赏
  • 举报
回复
id是员工工号,有3万多 number类型
shouru是员工的月收入,number类型
year_month 是用来记录日期的,但是是interger类型,如2006年一月份只需输200601,
bumen 是员工所属的部门代号,是varchar类型的
xpingping 2012-02-28
  • 打赏
  • 举报
回复
能解释下你的数据吗?不太懂……
fhuibo212 2012-02-28
  • 打赏
  • 举报
回复
bumen是varchar类型的,上面的代码不好使啊,id是number类型,shouru是number类型,year_month是integer类型, 继续求助
benluobo 2012-02-28
  • 打赏
  • 举报
回复
如果是int类型 下面的语句可以

select id, substr(year_month ,0,4) year, sum(shouru) shouru, bumen
from sa
group by id,substr(year_month ,0,4),bumen

fhuibo212 2012-02-28
  • 打赏
  • 举报
回复
year_month是integer类型的
Bymyeclipse 2012-02-28
  • 打赏
  • 举报
回复
如果新表的数据结构和源表一致,并且year_month是date类型的可以参照如下语句:
create table new_shouru (id,year,quannianshouru,bumen) as
select a.id,to_char(a.year_month,'YYYY'),sum(a.shouru),a.bumen
from shouru a group by a.id,to_char(a.year_month,'YYYY'),a.bumen;
benluobo 2012-02-28
  • 打赏
  • 举报
回复
如果是date类型的 用下列语句也可以

select id, to_char(year_month ,'YYYY') year, sum(shouru), bumen
from sa
group by id,to_char(year_month ,'YYYY'),bumen


benluobo 2012-02-28
  • 打赏
  • 举报
回复
对了 你的year_month 是什么类型 我这里是按照varchar 处理的
benluobo 2012-02-28
  • 打赏
  • 举报
回复

select id, substr(year_month ,0,4) year, sum(shouru), bumen
from sa
group by id,substr(year_month ,0,4),bumen


试试看看

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧