--> 测试数据: #ta
if object_id('tempdb.dbo.#ta') is not null drop table #ta
go
create table #ta (员工 varchar(100),项目1 int,项目2 int,项目3 int,项目4 int,项目5 int)
insert into #ta
select '员工1',12,17,22,33,41 union all
select '员工2',12,17,22,34,42 union all
select '员工3',12,17,22,35,43 union all
select '员工4',12,17,22,36,44 union all
select '员工5',12,17,22,37,45
员工         项目1         项目2         项目3         项目4         项目5
---------- ----------- ----------- ----------- ----------- -----------
员工1        12          17          22          33          41
员工2        12          17          22          34          42
员工3        12          17          22          35          43
员工4        12          17          22          36          44
员工5        12          17          22          37          45(5 行受影响)想要一个结果为:
行和列都有汇总的列表,如下格式
员工         项目1         项目2         项目3       项目4     项目5     总计
---------- ----------- ----------- ----------- ----------- -----------   -----------员工1        12          17          22          33          41
员工2        12          17          22          34          42
员工3        12          17          22          35          43
员工4        12          17          22          36          44
员工5        12          17          22          37          45
总计         
因为这是表,行是随时增加的,可能还会有 员工6 7 .....

解决方案 »

  1.   

    select 项目1,项目2,项目3,项目4,项目5,(项目1+项目2+项目3+项目4+项目5) as 总计 from #ta
    union
    select 总计 as 员工,sum(项目1) as 项目1,sum(项目2) as 项目2,sum(项目3) as 项目3
    ,sum(项目4) as 项目4,sum(项目5) as 项目5,sum(项目1+项目2+项目3+项目4+项目5) as 合计 from #ta
      

  2.   


    if object_id('tempdb.dbo.#ta') is not null drop table #ta
    go
    create table #ta (员工 varchar(100),项目1 int,项目2 int,项目3 int,项目4 int,项目5 int)
    insert into #ta
    select '员工1',12,17,22,33,41 union all
    select '员工2',12,17,22,34,42 union all
    select '员工3',12,17,22,35,43 union all
    select '员工4',12,17,22,36,44 union all
    select '员工5',12,17,22,37,45select * from #taselect 员工,项目1,项目2,项目3,项目4,项目5,(项目1+项目2+项目3+项目4+项目5) as 总计 from #ta
    union
    select '总计' as 员工, sum(项目1) as 项目1,sum(项目2) as 项目2,sum(项目3) as 项目3
    ,sum(项目4) as 项目4,sum(项目5) as 项目5,sum(项目1+项目2+项目3+项目4+项目5) as 合计 from #ta
    -----------
    员工1 12 17 22 33 41 125
    员工2 12 17 22 34 42 127
    员工3 12 17 22 35 43 129
    员工4 12 17 22 36 44 131
    员工5 12 17 22 37 45 133
    总计 60 85 110 175 215 645
      

  3.   

    select case when 员工 is null then '合计' else 员工 end
    ,sum(项目1)
    ,sum(项目2)
    ,sum(项目3)
    ,sum(项目4)
    ,sum(项目5),
    sum(项目1+项目2+项目3+项目4+项目5) 
    from #ta
    group by 员工 with rollup
      

  4.   

    如果 #ta 只是一个数据集,
    它的列也是动态的,
    项目1....N,这个该如何解决??
      

  5.   

    if object_id('tempdb.dbo.#ta') is not null drop table #ta
    go
    create table #ta (员工 varchar(100),项目1 int,项目2 int,项目3 int,项目4 int,项目5 int)
    insert into #ta
    select '员工1',12,17,22,33,41 union all
    select '员工2',12,17,22,34,42 union all
    select '员工3',12,17,22,35,43 union all
    select '员工4',12,17,22,36,44 union all
    select '员工5',12,17,22,37,45select isnull(员工,'合计'),sum(项目1),sum(项目2),sum(项目3),sum(项目4),
    sum(项目5),sum((项目1+项目2+项目3+项目4+项目5)) as 总计 
    from #ta
    GROUP BY 员工 with rollup
      

  6.   

    我没模拟出 列是动态的表来,只能用这个表达下这意思,实际上 #ta 只是一个结果集,
    这个结果集的 行和列都是动态的。
    已经在界面用js处理了。
    想了解下,能不能在sql写出来。