数据库表 tb_emp
字段:职工号,姓名,班组名称,档案工资,奖金,应纳税金,实得工资,应发工资合计,年, 月
数据: 001 张三 0010 2000 1500 20 3480 3480 2012 1
001 张三 0010 2000 1400 15 3385 3385 2012 2
001 张三 0010 2000 1300 10 3290 3290 2012 3
002 李四 0020 2000 1500 20 3480 3480 2012 1
002 李四 0020 2000 1400 15 3385 3385 2012 2
002 李四 0020 2000 1500 20 3290 3290 2012 3
我想用数据库语句实现下列形式:其中月份需要用户输入需统计的截止月份,比如“1--3”月份:
职工号,姓名,班组名称,档案工资,奖金,应纳税金,实得工资,应发工资合计,年, 月
001 张三 0010 2000 1500 20 3480 3480 2012 1
001 张三 0010 2000 1400 15 3385 3385 2012 2
001 张三 0010 2000 1300 10 3290 3290 2012 3
001 合计 6000 4200 45 10155 10155
002 李四 0010 2000 1500 20 3480 3480 2012 1
002 李四 0010 2000 1400 15 3385 3385 2012 2
002 李四 0010 2000 1300 10 3290 3290 2012 3
002 合计 6000 4200 45 10155 10155
望各位大神不吝赐教,谢谢
------解决方案--------------------
2000里面好象还没有05里面的一些高级特性.
select 职工号,姓名,班组名称,档案工资,奖金,应纳税金,实得工资,应发工资合计,年, 月
(
select 职工号,姓名,班组名称,档案工资,奖金,应纳税金,实得工资,应发工资合计,年, 月
from tb_temp where 月 between '1' and '3'
union all
select 职工号,'合计',班组名称,sum(档案工资),sum(奖金),sum(应纳税金),sum(实得工资),sum(应发工资合计),'',''
from tb_temp where 月 between '1' and '3'
group by 职工号
)
order by 职工号
------解决方案--------------------
- SQL code
--> 测试数据:[tb_emp]if object_id('[tb_emp]') is not null drop table [tb_emp]create table [tb_emp]([职工号] varchar(3),[姓名] varchar(4),[班组名称] varchar(4),[档案工资] int,[奖金] int,[应纳税金] int,[实得工资] int,[应发工资合计] int,[年] int,[月] int)insert [tb_emp]select '001','张三','0010',2000,1500,20,3480,3480,2012,1 union allselect '001','张三','0010',2000,1400,15,3385,3385,2012,2 union allselect '001','张三','0010',2000,1300,10,3290,3290,2012,3 union allselect '002','李四','0020',2000,1500,20,3480,3480,2012,1 union allselect '002','李四','0020',2000,1400,15,3385,3385,2012,2 union allselect '002','李四','0020',2000,1500,20,3290,3290,2012,3select * from [tb_emp]union allselect 职工号,姓名='合',班组名称='计',sum(档案工资) 档案工资,sum(奖金) 奖金,sum(应纳税金) 应纳税金,sum(实得工资) 实得工资,sum(应发工资合计) 应发工资合计,年,月=''from [tb_emp] group by [职工号],[姓名],[班组名称],年order by 职工号,档案工资/*职工号 姓名 班组名称 档案工资 奖金 应纳税金 实得工资 应发工资合计 年 月001 张三 0010 2000 1500 20 3480 3480 2012 1001 张三 0010 2000 1400 15 3385 3385 2012 2001 张三 0010 2000 1300 10 3290 3290 2012 3001 合 计 6000 4200 45 10155 10155 2012 0002 李四 0020 2000 1500 20 3480 3480 2012 1002 李四 0020 2000 1400 15 3385 3385 2012 2002 李四 0020 2000 1500 20 3290 3290 2012 3002 合 计 6000 4400 55 10155 10155 2012 0*/
------解决方案--------------------
- SQL code
create table emp_salary( empid varchar(3), empname varchar(10), classname varchar(5), basic_salary money, rewards money, tax money, final_salary money, salary_out money, syear varchar(4), smonth int)insert into emp_salary select '001', 'ZS' ,'0010' ,2000, 1500, 20, 3480, 3480, '2012', 1 union all select '001', 'ZS', '0010' ,2000, 1400, 15, 3385, 3385, '2012', 2 union all select '001', 'ZS' ,'0010', 2000, 1300, 10, 3290, 3290, '2012', 3 union all select '002', 'LS' ,'0020', 2000, 1500, 20, 3480, 3480, '2012', 1 union all select '002', 'LS' ,'0020', 2000, 1400, 15, 3385, 3385, '2012', 2 union all select '002', 'LS' ,'0020', 2000, 1500, 20, 3290, 3290, '2012', 3 select * from (select empid,empname,classname,basic_salary,rewards,tax,final_salary,salary_out,syear, smonthfrom emp_salary where smonth between 1 and 3union allselect empid,'Total',classname,sum(basic_salary),sum(rewards),sum(tax),sum(final_salary),sum(salary_out),null,null from emp_salary where smonth between 1 and 3 group by empid,classname) as qorder by empid,syear desc