原数据(部门确定,就这三个部门)
姓名 部门 完成零件1 完成零件2
A 001 100 200
B 001 200 100
C 002 100 100
D 003 200 200
要求得出如下数据
姓名 部门 完成零件1 完成零件2
A 001 100 200
B 001 200 100
C 002 100 100
D 003 200 200
部门001完成 null 300 300
部门002完成 null 100 100
部门002完成 null 200 200简单的说就是后面加三行汇总,我想过后面的汇总值每一个值都用一个子查询,除了这种方法,还有什么好方法(因为零件实际上有8种类型,等于要做24个子查询,而且我的原数据不是数据表本身就有的,而是经过查询得出来的)。数据库是2005,是否有新技术解决该问题。
姓名 部门 完成零件1 完成零件2
A 001 100 200
B 001 200 100
C 002 100 100
D 003 200 200
要求得出如下数据
姓名 部门 完成零件1 完成零件2
A 001 100 200
B 001 200 100
C 002 100 100
D 003 200 200
部门001完成 null 300 300
部门002完成 null 100 100
部门002完成 null 200 200简单的说就是后面加三行汇总,我想过后面的汇总值每一个值都用一个子查询,除了这种方法,还有什么好方法(因为零件实际上有8种类型,等于要做24个子查询,而且我的原数据不是数据表本身就有的,而是经过查询得出来的)。数据库是2005,是否有新技术解决该问题。
--> 测试数据: #t
if object_id('tempdb.dbo.#t') is not null drop table #t
go
create table #t (姓名 varchar(1),部门 varchar(3),完成零件1 int,完成零件2 int)
insert into #t
select 'A','001',100,200 union all
select 'B','001',200,100 union all
select 'C','002',100,100 union all
select 'D','003',200,200select *
from #t
union all
select '部门'+部门+'完成', 部门,sum(完成零件1),sum(完成零件1)
from #t
group by 部门 with rollup姓名 部门 完成零件1 完成零件2
----------- ---- ----------- -----------
A 001 100 200
B 001 200 100
C 002 100 100
D 003 200 200
部门001完成 001 300 300
部门002完成 002 100 100
部门003完成 003 200 200
NULL NULL 600 600(所影响的行数为 8 行)??
group by
with rollup
INSERT @a SELECT 'A', '001', 100 , 200
union all select 'B', '001', 200 , 100
union all select 'C', '002', 100 , 100
union all select 'D', '003', 200 , 200 SELECT isnull(xm,'部门'+bm+'完成') xm,bm=case when xm is null then null else bm end,lj1,lj2 from(
SELECT xm,bm,sum(lj1) lj1,sum(lj2) lj2
FROM @a
GROUP BY xm,bm
WITH CUBE
) aa WHERE bm IS NOT NULL
--result
/*
xm bm lj1 lj2
-------------------- -------------------- ----------- -----------
A 001 100 200
B 001 200 100
C 002 100 100
D 003 200 200
部门001完成 NULL 300 300
部门002完成 NULL 100 100
部门003完成 NULL 200 200(所影响的行数为 7 行)*/