当前位置: 代码迷 >> Sql Server >> 大神速来帮忙解决个有关问题!
  详细解决方案

大神速来帮忙解决个有关问题!

热度:68   发布时间:2016-04-24 18:19:07.0
大神速来帮忙解决个问题!!
这是一个视图的结构
项目名称                        岗位                  人数   
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
  相关解决方案