当前位置: 代码迷 >> Sql Server >> 求一sql2000的语句,实现下面功能,鼓捣好几天了,期待大神出现!该如何解决
  详细解决方案

求一sql2000的语句,实现下面功能,鼓捣好几天了,期待大神出现!该如何解决

热度:39   发布时间:2016-04-27 13:20:05.0
求一sql2000的语句,实现下面功能,鼓捣好几天了,期待大神出现!
数据库表 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
  相关解决方案