34,571
社区成员
发帖
与我相关
我的任务
分享
A表
主键,部门,等级,是否操作A产品(1操作0否),是否操作B产品(1操作0否),是否操作C产品(1操作0否),店名,人员
AID,BM,Class,IsAType,IsBType,IsCtype,AName,Person
1,'部门A','A',1,0,1,'temp1','ABC'
2,'部门A','B',1,1,1,'temp2','ABC'
3,'部门A','A',0,0,1,'temp3','BCD'
4,'部门B','C',0,1,1,'temp4','CDE'
5,'部门C','C',0,1,1,'temp5','DEF'
6,'部门D','D',1,0,0,'temp6','FGH'
B表
主键,附件名称,A表ID
BID,FJName,AIDs
1,'a',1
2,'b',1
3,'c',2
4,'d',3
5,'e',6
现在要根据这两个表统计,按照部门,等级,人员,操作产品的附件上传信息汇总
最后出来的效果就是
部门,人员,产品,A级数量,A级以上传附件数量,B级数量,B级以上传附件数量,C级数量,C级以上传附件数量,D级数量,D级以上传附件数量,合计等级数量,合计以上传附件数量
'部门A','ABC',A,1,1,0,0,0,0,0,0,1,1
'部门A','ABC',B,0,0,1,1,0,0,0,0,1,1
'部门A','ABC',C,1,1,0,0,1,1,0,0,2,2
报表就是这样,最后根据部门,人员,操作产品,统计每个等级的店数量,已经上传附件的店数量(同一店上传多张算一张,只计算是否上传,同时如果该店操作多个产品A,B,C都操作,但是只要上传一张,即所有A,B,C产品都算上传过。)
--大版的blog
2005的行列转换:
create table ta(编号 int,人员 varchar(5), 年份 int,月份 int ,[1号] varchar(5), [2号] varchar(5),[3号] varchar(5),[4号] varchar(5))
insert ta select 1, '张三',2006, 1, '正常', '迟到', '迟到', '事假'
union all select 2, '张三', 2006, 2, '迟到', '事假', '正常', '正常'
union all select 3, '李四', 2006, 3, '正常', '正常', '正常', '正常'
union all select 4, '王五', 2007, 5, '正常', '正常','正常', '正常'
2005的列转行再行转列:
declare @sql varchar(4000)
select @sql=isnull(@sql+',','')+quotename(Orders)
from ta
unpivot
(orders for [原因] in([1号],[2号],[3号],[4号])
)as tb group by Orders
--print @sql
set @sql='select 编号,人员,年份,月份,'+@sql+
'from (
select 编号,人员,年份,月份,原因,Orders
from ta
unpivot
(orders for [原因] in([1号],[2号],[3号],[4号])
)as tb
)tmp
pivot
(count(原因) for Orders in('+@sql+')
)tmp2'
--print @sql
exec(@sql)
编号 人员 年份 月份 迟到 事假 正常
----------- ----- ----------- ----------- ----------- ----------- -----------
1 张三 2006 1 2 1 1
2 张三 2006 2 1 1 2
3 李四 2006 3 0 0 4
4 王五 2007 5 0 0 4
(4 行受影响)