select 姓名,性别,部门,工资=sum(工资)
from project
group by 姓名,性别,部门
union all
select 姓名,'','',工资=sum(工资)
from project
group by 姓名

解决方案 »

  1.   

    --测试--测试数据
    create table project(姓名 varchar(10),性别 varchar(10),部门 varchar(10),月份 int,工资 int)
    insert project select '黎明','男','技术部',1,500
    union  all     select '黎明','男','综合部',1,1000
    union  all     select '黎明','男','综合部',2,2000
    go--查询
    select 姓名,性别,部门,工资=sum(工资)
    from project
    group by 姓名,性别,部门
    union all
    select 姓名,'','',工资=sum(工资)
    from project
    group by 姓名
    go--删除测试
    drop table project/*--测试结果
    姓名         性别         部门         工资          
    ---------- ---------- ---------- ----------- 
    黎明         男          技术部        500
    黎明         男          综合部        3000
    黎明                                   3500(所影响的行数为 3 行)
    --*/
      

  2.   

    --上面有一点没有考虑到的是,如果同时统计多个人,那汇总数据的排序有问题,改:select 姓名,性别,部门,工资
    from(
    select 姓名,性别,部门,工资=sum(工资),s1=姓名,s2=0
    from project
    group by 姓名,性别,部门
    union all
    select 姓名,'','',工资=sum(工资),s1=姓名,s2=1
    from project
    group by 姓名
    )a order by s1,s2
      

  3.   

    --测试--测试数据
    create table project(姓名 varchar(10),性别 varchar(10),部门 varchar(10),月份 int,工资 int)
    insert project select '黎明','男','技术部',1,500
    union  all     select '黎明','男','综合部',1,1000
    union  all     select '黎明','男','综合部',2,2000
    union  all     select '张明','男','技术部',1,800
    union  all     select '张明','男','综合部',2,2000
    go--查询
    select 姓名,性别,部门,工资
    from(
    select 姓名,性别,部门,工资=sum(工资),s1=姓名,s2=0
    from project
    group by 姓名,性别,部门
    union all
    select 姓名,'','',工资=sum(工资),s1=姓名,s2=1
    from project
    group by 姓名
    )a order by s1,s2
    go--删除测试
    drop table project/*--测试结果姓名         性别         部门         工资          
    ---------- ---------- ---------- ----------- 
    黎明         男          技术部        500
    黎明         男          综合部        3000
    黎明                                   3500
    张明         男          技术部        800
    张明         男          综合部        2000
    张明                                   2800(所影响的行数为 6 行)
    --*/