数据库表 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       
望各位大神不吝赐教,谢谢

解决方案 »

  1.   

    2008 里面增加了 CUBE 功能 可以满足你需要 你可以试试。
      

  2.   

    select 职工号,姓名,班组名称,档案工资,奖金,应纳税金,实得工资,应发工资合计,年, 月
    order by 职工号
    compute by sum(档案工资),sum(奖金),sum(应纳税金),sum(实得工资),sum(应发工资合计)
      

  3.   

    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 职工号
      

  4.   

    create table #temp (职工号 int,姓名 varchar(20),班组名称 int,档案工资 money,奖金 money,应纳税金 money,实得工资 money,应发工资合计 money,年 int, 月 int)
    insert into #temp (职工号,姓名,班组名称,档案工资,奖金,应纳税金,实得工资,应发工资合计,年, 月) values (001 ,'张三', 0010 ,2000 ,1500 ,20 ,3480, 3480, 2012, 1)
    insert into #temp (职工号,姓名,班组名称,档案工资,奖金,应纳税金,实得工资,应发工资合计,年, 月) values (001 ,'张三', 0010 ,2000, 1400, 15 ,3385 ,3385, 2012, 2)
    insert into #temp (职工号,姓名,班组名称,档案工资,奖金,应纳税金,实得工资,应发工资合计,年, 月) values (001 ,'张三',0010 ,2000 ,1300 ,10, 3290 ,3290, 2012 ,3)      
    insert into #temp (职工号,姓名,班组名称,档案工资,奖金,应纳税金,实得工资,应发工资合计,年, 月) values ( 002 ,'李四', 0020, 2000 ,1500, 20, 3480, 3480, 2012, 1)
    insert into #temp (职工号,姓名,班组名称,档案工资,奖金,应纳税金,实得工资,应发工资合计,年, 月) values ( 002, '李四' ,0020, 2000 ,1400, 15 ,3385, 3385, 2012 ,2)
    insert into #temp (职工号,姓名,班组名称,档案工资,奖金,应纳税金,实得工资,应发工资合计,年, 月) values ( 002 ,'李四', 0020 ,2000, 1500 ,20, 3290 ,3290 ,2012, 3)
           
           SELECT 职工号,姓名,班组名称,
                  SUM(档案工资) AS 合计档案工资 ,
                  SUM(奖金) AS 合计奖金,
                  SUM(应纳税金) AS 合计应纳税金,
                  SUM(实得工资) AS 合计实得工资,
                  SUM(应发工资合计) AS 应发工资总计
         
                  FROM #temp
                  WHERE 年='2012' AND 月 BETWEEN 1 AND 3
                  
                  GROUP BY 职工号,姓名,班组名称
      

  5.   


    --> 测试数据:[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,3select * 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
    */
      

  6.   

    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, smonth
    from emp_salary where smonth between 1 and 3
    union all
    select 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 q
    order by empid,syear desc
      

  7.   

    select * from [tb_emp] where year=2011 and month between 7 and 12 or year=2012 and month between 1 and 3
    union all
    select 职工号,姓名='合',班组名称='计',sum(档案工资) 档案工资,
    sum(奖金) 奖金,sum(应纳税金) 应纳税金,sum(实得工资) 实得工资,
    sum(应发工资合计) 应发工资合计,年,月=''
    from [tb_emp] 
    where year=2011 and month between 7 and 12 or year=2012 and month between 1 and 3
    group by [职工号],[姓名],[班组名称],年
    order by 职工号,档案工资