根据业务需求写出大概的sql:
select datepart(month,[Date]) 月份,users.[name] 业务员,count(users.[name]) 数量,t.[Description] 类别 from Quo_Standardcost inner join users on BusinessId=users.id inner join (select UserId,[Description] from JobType inner join JobTypeDetail on ParentId=JobType.Id) AS t ON BusinessId=t.UserId group by datepart(month,[Date]),t.[Description],name order by t.[Description]
最终的结果是
中间写入临时表,比较好操作 主要是没办法 SQL SERVER 2000版本低呀 否则就用with了
第二步:
按月份,业务员,类别汇总吧
select 业务员,类别, 一月=isnull(sum(case 月份 when '1' then 数量 end),0), 二月=isnull(sum(case 月份 when '2' then 数量 end),0), 三月=isnull(sum(case 月份 when '3' then 数量 end),0), 四月=isnull(sum(case 月份 when '4' then 数量 end),0), 五月=isnull(sum(case 月份 when '5' then 数量 end),0), 六月=isnull(sum(case 月份 when '6' then 数量 end),0), 七月=isnull(sum(case 月份 when '7' then 数量 end),0), 八月=isnull(sum(case 月份 when '8' then 数量 end),0), 九月=isnull(sum(case 月份 when '9' then 数量 end),0), 十月=isnull(sum(case 月份 when '10' then 数量 end),0), 十一月=isnull(sum(case 月份 when '11' then 数量 end),0), 十二月=isnull(sum(case 月份 when '12' then 数量 end),0) from #tempt group by 月份,业务员,类别
第三步:合并同类项目
select 业务员,类别, sum(一月) as 一月, sum(二月) as 二月, sum(三月) as 三月, sum(四月) as 四月, sum(五月) as 五月, sum(六月) as 六月, sum(七月) as 七月, sum(八月) as 八月, sum(九月) as 九月, sum(十月) as 十月, sum(十一月) as 十一月, sum(十二月) as 十二月 from ( select 业务员,类别, 一月=isnull(sum(case 月份 when '1' then 数量 end),0), 二月=isnull(sum(case 月份 when '2' then 数量 end),0), 三月=isnull(sum(case 月份 when '3' then 数量 end),0), 四月=isnull(sum(case 月份 when '4' then 数量 end),0), 五月=isnull(sum(case 月份 when '5' then 数量 end),0), 六月=isnull(sum(case 月份 when '6' then 数量 end),0), 七月=isnull(sum(case 月份 when '7' then 数量 end),0), 八月=isnull(sum(case 月份 when '8' then 数量 end),0), 九月=isnull(sum(case 月份 when '9' then 数量 end),0), 十月=isnull(sum(case 月份 when '10' then 数量 end),0), 十一月=isnull(sum(case 月份 when '11' then 数量 end),0), 十二月=isnull(sum(case 月份 when '12' then 数量 end),0) from #tempt group by 月份,业务员,类别) t1 group by 业务员,类别
同理单独汇总 按类别合计:类别和业务员排序
select * from ( select 业务员,类别, sum(一月) as 一月, sum(二月) as 二月, sum(三月) as 三月, sum(四月) as 四月, sum(五月) as 五月, sum(六月) as 六月, sum(七月) as 七月, sum(八月) as 八月, sum(九月) as 九月, sum(十月) as 十月, sum(十一月) as 十一月, sum(十二月) as 十二月 from ( select 业务员,类别, 一月=isnull(sum(case 月份 when '1' then 数量 end),0), 二月=isnull(sum(case 月份 when '2' then 数量 end),0), 三月=isnull(sum(case 月份 when '3' then 数量 end),0), 四月=isnull(sum(case 月份 when '4' then 数量 end),0), 五月=isnull(sum(case 月份 when '5' then 数量 end),0), 六月=isnull(sum(case 月份 when '6' then 数量 end),0), 七月=isnull(sum(case 月份 when '7' then 数量 end),0), 八月=isnull(sum(case 月份 when '8' then 数量 end),0), 九月=isnull(sum(case 月份 when '9' then 数量 end),0), 十月=isnull(sum(case 月份 when '10' then 数量 end),0), 十一月=isnull(sum(case 月份 when '11' then 数量 end),0), 十二月=isnull(sum(case 月份 when '12' then 数量 end),0) from #tempt group by 月份,业务员,类别) t1 group by 业务员,类别 union all select '总计' as 业务员,类别, sum(一月) as 一月, sum(二月) as 二月, sum(三月) as 三月, sum(四月) as 四月, sum(五月) as 五月, sum(六月) as 六月, sum(七月) as 七月, sum(八月) as 八月, sum(九月) as 九月, sum(十月) as 十月, sum(十一月) as 十一月, sum(十二月) as 十二月 from ( select 类别, 一月=isnull(sum(case 月份 when '1' then 数量 end),0), 二月=isnull(sum(case 月份 when '2' then 数量 end),0), 三月=isnull(sum(case 月份 when '3' then 数量 end),0), 四月=isnull(sum(case 月份 when '4' then 数量 end),0), 五月=isnull(sum(case 月份 when '5' then 数量 end),0), 六月=isnull(sum(case 月份 when '6' then 数量 end),0), 七月=isnull(sum(case 月份 when '7' then 数量 end),0), 八月=isnull(sum(case 月份 when '8' then 数量 end),0), 九月=isnull(sum(case 月份 when '9' then 数量 end),0), 十月=isnull(sum(case 月份 when '10' then 数量 end),0), 十一月=isnull(sum(case 月份 when '11' then 数量 end),0), 十二月=isnull(sum(case 月份 when '12' then 数量 end),0) from #tempt group by 类别) t2 group by 类别 ) t3 order by t3.类别,t3.业务员
完成啦,写成存储过程 供调用!