这是一个视图的结构
项目名称 岗位 人数
NoProject 规划部部长 1
aaaaaaaaaaaa 现场经理 1
bbbbbbbbbbbb 项目部副部长 1
ccccccccccccc 项目经理 1
dddddddddddd 项目经理 1
eeeeeeeeeeee 项目经理 2
fffffffffffffffffffffff 项目经理助理 1
declare @sql varchar(8000)
set @sql='select wprojectid as '+'项目号'
select @sql=@sql+',max(case positionName when '''+ positionName+''' then num else 0 end)[' + positionname + ']'
from (select distinct positionName from ProjectAndPosition ) as a
set @sql=@sql+' from ProjectAndPosition group by wprojectid'
exec(@sql)
通过这个动态的SQL语句能变成格式如下
项目名称 规划部长 项目经理 项目经理助理 现场经理
XXXXX 1 1 1 1
问题
①现在我想在每一行之后加一列 总计 即一个项目各岗位的人数和(岗位是动态的 不知道有多少)
②然后在最后一行 加一列 是对应各岗位的人数
------解决方案--------------------
----------------------------------------------------------------
-- Author :fredrickhu(小F,向高手学习)
-- Date :2014-03-27 10:10:43
-- Verstion:
-- Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
-- Jul 9 2008 14:43:34
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Enterprise Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[ProjectAndPosition]
if object_id('[ProjectAndPosition]') is not null drop table [ProjectAndPosition]
go
create table [ProjectAndPosition]([wprojectid] varchar(23),[positionName] varchar(12),[num] int)
insert [ProjectAndPosition]
select 'NoProject','规划部部长',1 union all
select 'aaaaaaaaaaaa','现场经理',1 union all
select 'bbbbbbbbbbbb','项目部副部长',1 union all
select 'ccccccccccccc','项目经理',1 union all
select 'dddddddddddd','项目经理',1 union all
select 'eeeeeeeeeeee','项目经理',2 union all
select 'fffffffffffffffffffffff','项目经理助理',1
--------------开始查询--------------------------
declare @sql varchar(8000)
set @sql='select isnull(wprojectid,''总计'') as '+'项目号'
select @sql=@sql+',max(case positionName when '''+ positionName+''' then num else 0 end)[' + positionname + ']'
from (select distinct positionName from ProjectAndPosition ) as a
set @sql=@sql+' ,sum(num) as 总计 from ProjectAndPosition group by wprojectid with rollup'
exec(@sql)
----------------结果----------------------------
/* 项目号 规划部部长 现场经理 项目部副部长 项目经理 项目经理助理 总计
----------------------- ----------- ----------- ----------- ----------- ----------- -----------
aaaaaaaaaaaa 0 1 0 0 0 1
bbbbbbbbbbbb 0 0 1 0 0 1