--> 测试数据: #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 .....
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 .....
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
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
,sum(项目1)
,sum(项目2)
,sum(项目3)
,sum(项目4)
,sum(项目5),
sum(项目1+项目2+项目3+项目4+项目5)
from #ta
group by 员工 with rollup
它的列也是动态的,
项目1....N,这个该如何解决??
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
这个结果集的 行和列都是动态的。
已经在界面用js处理了。
想了解下,能不能在sql写出来。