【关于两表汇总统计各个数量的报表问题】

wanshichen 2012-07-27 02:45:21

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产品都算上传过。)
...全文
199 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanshichen 2012-07-31
  • 打赏
  • 举报
回复
感谢各位,已经搞定了,经过两层GROUP BY 以及一层行列转换,总算完成了。。。
续写经典 2012-07-29
  • 打赏
  • 举报
回复
一不小心就发重复了
续写经典 2012-07-29
  • 打赏
  • 举报
回复
参考一下吧:

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 行受影响)
续写经典 2012-07-29
  • 打赏
  • 举报
回复
参考一下吧:

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 行受影响)
以学习为目的 2012-07-29
  • 打赏
  • 举报
回复

--大版的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 行受影响)


  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
行列转换,苦力活

到精华帖找找

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧