日期:2014-05-18  浏览次数:20512 次

求一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 all
select '001','张三','0010',2000,1400,15,3385,3385,2012,2 union all
select '001','张三','0010',2000,1300,10,3290,3290,2012,3 union all
select '002','李四','0020',2000,1500,20,3480,3480,2012,1 union all
select '002','李四','0020',2000,1400,15,3385,3385,2012,2 union all
select '002','李四','0020',2000,1500,20,3290,3290,2012,3

select * from [tb_emp]
union all
select 职工号,姓名='合',班组名称='计',sum(档案工资) 档案工资,
sum(奖金) 奖金,sum(应纳税金) 应纳税金,sum(实得工资) 实得工资,
sum(应发工资合计) 应发工资合计,年,月=''
from [tb_emp] 
group by [职工号],[姓名],[班组名称],年
order by 职工号,档案工资
/*
职工号    姓名    班组名称    档案工资    奖金    应纳税金    实得工资    应发工资合计    年    月
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    2012    0
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
002    合    计    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 
s