create table 派工单表
(
合同编号 varchar(20),
制作部位明细 varchar(50),
制作人1 varchar(20),
制作人1工时费 decimal(13,2),
制作人2 varchar(20),
制作人2工时费 decimal(13,2),
制作人3 varchar(20),
制作人3工时费 decimal(13,2),
制作人4 varchar(20),
制作人4工时费 decimal(13,2),
制作人5 varchar(20),
制作人5工时费 decimal(13,2),
制作人6 varchar(20),
制作人6工时费 decimal(13,2),
制作人7 varchar(20),
制作人7工时费 decimal(13,2),
项目负责人 varchar(20),
项目负责人工时费 decimal(13,2),
派工日期 datetime
)
insert into 派工单表 select'HTZZ-1','割板','员工1',34,null,null,null,null,null,null,null,null,null,null,null,null,null,null,'2007-5-1'
insert into 派工单表 select'HTZZ-1','对梁','员工1',34,'员工2',34,null,null,null,null,null,null,null,null,null,null,null,null,'2007-5-1'
insert into 派工单表 select'HTZZ-1','焊合','员工1',34,'员工2',34,'员工3',50,null,null,null,null,null,null,null,null,'项目负责人1',20,'2007-5-1'insert into 派工单表 select'HTZZ-2','割板','员工1',34,null,null,null,null,null,null,null,null,null,null,null,null,null,null,'2007-5-2'
insert into 派工单表 select'HTZZ-2','对梁','员工1',34,'员工2',34,null,null,null,null,null,null,null,null,null,null,null,null,'2007-5-2'
insert into 派工单表 select'HTZZ-2','焊合','员工1',34,'员工2',34,'员工3',40,null,null,null,null,null,null,null,null,'项目负责人1',10,'2007-5-2'
select * from 派工单表
/*
要求得到这样的报表:
按照制作人或项目负责人进行统计:制作人 合同编号 割板(工时费) 对梁(工时费) 焊合(工时费) 派工日期
员工1 HTZZ-1 34 34 34 2007-5-1
员工1 HTZZ-2 34 34 34 2005-5-2
员工2 HTZZ-1 0.00 34 34 2007-5-1
员工2 HTZZ-2 0.00 34 34 2007-5-2
员工3 HTZZ-1 0.00 0.00 50 2007-5-1
员工3 HTZZ-2 0.00 0.00 40 2007-5-2
项目负责人1 HTZZ-1 0.00 0.00 20 2007-5-1
项目负责人1 HTZZ-2 0.00 0.00 10 2007-5-2
*/drop table 派工单表
(
合同编号 varchar(20),
制作部位明细 varchar(50),
制作人1 varchar(20),
制作人1工时费 decimal(13,2),
制作人2 varchar(20),
制作人2工时费 decimal(13,2),
制作人3 varchar(20),
制作人3工时费 decimal(13,2),
制作人4 varchar(20),
制作人4工时费 decimal(13,2),
制作人5 varchar(20),
制作人5工时费 decimal(13,2),
制作人6 varchar(20),
制作人6工时费 decimal(13,2),
制作人7 varchar(20),
制作人7工时费 decimal(13,2),
项目负责人 varchar(20),
项目负责人工时费 decimal(13,2),
派工日期 datetime
)
insert into 派工单表 select'HTZZ-1','割板','员工1',34,null,null,null,null,null,null,null,null,null,null,null,null,null,null,'2007-5-1'
insert into 派工单表 select'HTZZ-1','对梁','员工1',34,'员工2',34,null,null,null,null,null,null,null,null,null,null,null,null,'2007-5-1'
insert into 派工单表 select'HTZZ-1','焊合','员工1',34,'员工2',34,'员工3',50,null,null,null,null,null,null,null,null,'项目负责人1',20,'2007-5-1'insert into 派工单表 select'HTZZ-2','割板','员工1',34,null,null,null,null,null,null,null,null,null,null,null,null,null,null,'2007-5-2'
insert into 派工单表 select'HTZZ-2','对梁','员工1',34,'员工2',34,null,null,null,null,null,null,null,null,null,null,null,null,'2007-5-2'
insert into 派工单表 select'HTZZ-2','焊合','员工1',34,'员工2',34,'员工3',40,null,null,null,null,null,null,null,null,'项目负责人1',10,'2007-5-2'
select * from 派工单表
/*
要求得到这样的报表:
按照制作人或项目负责人进行统计:制作人 合同编号 割板(工时费) 对梁(工时费) 焊合(工时费) 派工日期
员工1 HTZZ-1 34 34 34 2007-5-1
员工1 HTZZ-2 34 34 34 2005-5-2
员工2 HTZZ-1 0.00 34 34 2007-5-1
员工2 HTZZ-2 0.00 34 34 2007-5-2
员工3 HTZZ-1 0.00 0.00 50 2007-5-1
员工3 HTZZ-2 0.00 0.00 40 2007-5-2
项目负责人1 HTZZ-1 0.00 0.00 20 2007-5-1
项目负责人1 HTZZ-2 0.00 0.00 10 2007-5-2
*/drop table 派工单表
max(case 制作部位明细 when '割板' then 制作人1工时费 end) as [割板(工时费)],
max(case 制作部位明细 when '对梁' then 制作人1工时费 end) as [对梁(工时费)],
max(case 制作部位明细 when '焊合' then 制作人1工时费 end) as [焊合(工时费)],
派工日期
from 派工单表
group by 制作人1,合同编号,派工日期union allselect 制作人2,合同编号,
max(case 制作部位明细 when '割板' then 制作人2工时费 end) as [割板(工时费)],
max(case 制作部位明细 when '对梁' then 制作人2工时费 end) as [对梁(工时费)],
max(case 制作部位明细 when '焊合' then 制作人2工时费 end) as [焊合(工时费)],
派工日期
from 派工单表
where 制作人2 is not null
group by 制作人2,合同编号,派工日期union allselect 制作人3,合同编号,
max(case 制作部位明细 when '割板' then 制作人3工时费 end) as [割板(工时费)],
max(case 制作部位明细 when '对梁' then 制作人3工时费 end) as [对梁(工时费)],
max(case 制作部位明细 when '焊合' then 制作人3工时费 end) as [焊合(工时费)],
派工日期
from 派工单表
where 制作人3 is not null
group by 制作人3,合同编号,派工日期....
select distinct 制作人,合同编号,sum(case 制作部位明细 when N'割板' then 工时费 else 0 end ) as 割板,
sum(case 制作部位明细 when N'对梁' then 工时费 else 0 end ) as 对梁,
sum(case 制作部位明细 when N'焊合' then 工时费 else 0 end ) as 焊合,派工日期
from
(
select 合同编号 , 制作部位明细 , 制作人1 as 制作人 , 制作人1工时费 as 工时费 , 项目负责人 , 项目负责人工时费 , 派工日期 from 派工单表 union
select 合同编号 , 制作部位明细 , 制作人2 , 制作人2工时费 , 项目负责人 , 项目负责人工时费 , 派工日期 from 派工单表 union
select 合同编号 , 制作部位明细 , 制作人3 , 制作人3工时费 , 项目负责人 , 项目负责人工时费 , 派工日期 from 派工单表 union
select 合同编号 , 制作部位明细 , 制作人4 , 制作人4工时费 , 项目负责人 , 项目负责人工时费 , 派工日期 from 派工单表 union
select 合同编号 , 制作部位明细 , 制作人5 , 制作人5工时费 , 项目负责人 , 项目负责人工时费 , 派工日期 from 派工单表 union
select 合同编号 , 制作部位明细 , 制作人6 , 制作人6工时费 , 项目负责人 , 项目负责人工时费 , 派工日期 from 派工单表 union
select 合同编号 , 制作部位明细 , 制作人7 , 制作人7工时费 , 项目负责人 , 项目负责人工时费 , 派工日期 from 派工单表 union
select 合同编号 , 制作部位明细 , 项目负责人 , 项目负责人工时费 , 项目负责人 , 项目负责人工时费 , 派工日期 from 派工单表
) a
where 制作人 is not null
group by 制作人,合同编号,派工日期
--result
员工1 HTZZ-1 34.00 34.00 34.00 2007-05-01 00:00:00.000
员工1 HTZZ-2 34.00 34.00 34.00 2007-05-02 00:00:00.000
员工2 HTZZ-1 .00 34.00 34.00 2007-05-01 00:00:00.000
员工2 HTZZ-2 .00 34.00 34.00 2007-05-02 00:00:00.000
员工3 HTZZ-1 .00 .00 50.00 2007-05-01 00:00:00.000
员工3 HTZZ-2 .00 .00 40.00 2007-05-02 00:00:00.000
项目负责人1 HTZZ-1 .00 .00 20.00 2007-05-01 00:00:00.000
项目负责人1 HTZZ-2 .00 .00 10.00 2007-05-02 00:00:00.000
[对梁(工时费)]=sum(case when 制作部位明细='对梁' then 制作人1工时费 else 0 end),
[焊合(工时费)]=sum(case when 制作部位明细='焊合' then 制作人1工时费 else 0 end),convert(varchar(10),派工日期,120)
from 派工单表 group by 合同编号,制作人1,派工日期 having 制作人1 is not null
union all
select 制作人2,合同编号,[割板(工时费)]=sum(case when 制作部位明细='割板' then 制作人2工时费 else 0 end),
[对梁(工时费)]=sum(case when 制作部位明细='对梁' then 制作人2工时费 else 0 end),
[焊合(工时费)]=sum(case when 制作部位明细='焊合' then 制作人2工时费 else 0 end),convert(varchar(10),派工日期,120)
from 派工单表 group by 合同编号,制作人2,派工日期 having 制作人2 is not null
union all
select 制作人3,合同编号,[割板(工时费)]=sum(case when 制作部位明细='割板' then 制作人2工时费 else 0 end),
[对梁(工时费)]=sum(case when 制作部位明细='对梁' then 制作人3工时费 else 0 end),
[焊合(工时费)]=sum(case when 制作部位明细='焊合' then 制作人3工时费 else 0 end),convert(varchar(10),派工日期,120)
from 派工单表 group by 合同编号,制作人3,派工日期 having 制作人3 is not null
union all
select 制作人4,合同编号,[割板(工时费)]=sum(case when 制作部位明细='割板' then 制作人2工时费 else 0 end),
[对梁(工时费)]=sum(case when 制作部位明细='对梁' then 制作人4工时费 else 0 end),
[焊合(工时费)]=sum(case when 制作部位明细='焊合' then 制作人4工时费 else 0 end),convert(varchar(10),派工日期,120)
from 派工单表 group by 合同编号,制作人4,派工日期 having 制作人4 is not null
union all
select 制作人5,合同编号,[割板(工时费)]=sum(case when 制作部位明细='割板' then 制作人2工时费 else 0 end),
[对梁(工时费)]=sum(case when 制作部位明细='对梁' then 制作人5工时费 else 0 end),
[焊合(工时费)]=sum(case when 制作部位明细='焊合' then 制作人5工时费 else 0 end),convert(varchar(10),派工日期,120)
from 派工单表 group by 合同编号,制作人5,派工日期 having 制作人5 is not null
union all
select 制作人6,合同编号,[割板(工时费)]=sum(case when 制作部位明细='割板' then 制作人6工时费 else 0 end),
[对梁(工时费)]=sum(case when 制作部位明细='对梁' then 制作人6工时费 else 0 end),
[焊合(工时费)]=sum(case when 制作部位明细='焊合' then 制作人6工时费 else 0 end),convert(varchar(10),派工日期,120)
from 派工单表 group by 合同编号,制作人6,派工日期 having 制作人6 is not null
union all
select 制作人7,合同编号,[割板(工时费)]=sum(case when 制作部位明细='割板' then 制作人7工时费 else 0 end),
[对梁(工时费)]=sum(case when 制作部位明细='对梁' then 制作人7工时费 else 0 end),
[焊合(工时费)]=sum(case when 制作部位明细='焊合' then 制作人7工时费 else 0 end),convert(varchar(10),派工日期,120)
from 派工单表 group by 合同编号,制作人7,派工日期 having 制作人7 is not null
union all
select 项目负责人,合同编号,[割板(工时费)]=sum(case when 制作部位明细='割板' then 项目负责人工时费 else 0 end),
[对梁(工时费)]=sum(case when 制作部位明细='对梁' then 项目负责人工时费 else 0 end),
[焊合(工时费)]=sum(case when 制作部位明细='焊合' then 项目负责人工时费 else 0 end),convert(varchar(10),派工日期,120)
from 派工单表 group by 合同编号,项目负责人,派工日期 having 项目负责人 is not null
union all
select 合同编号 , 制作部位明细, 制作人2, 制作人2工时费 from 派工单表
union all
....這樣統計起來就OK了,按[制作部位明细] 欄位行轉列
就像这样的了.先改回正确的结构,再叉表回LZ想要的