日期:2014-05-16  浏览次数:20394 次

指标报表数据的深度求解: 部门参数信息,部门指标数据。这两类参数信息都是表里动态的
部门参数信息,部门指标数据。这两类参数信息都是表里动态的。 怎么出一个类似于报表2的数据, 报表1的数据我已经能SQL筛出来了。

先拜谢!


比如: 
----------------------
部门表
table department

departmentID
departmentName

比如,有如下数据: 
 1     部门1 
 2     部门2 
----------------------
指标表

 table PeformanceIndex
 
PeformanceIndexID 
PeformanceName

比如,有如下数据: 
 1     出勤率
 2     领导满意度 
 3     工作效率
----------------------


当然中间有一个关联表。 

最后能筛选筛选出部门的指标信息: 

比如如下格式的数据报表1: 
列1 列2 列3
部门1   出勤率  90分 
部门1   领导满意度  92分 
部门1   工作效率    95分
部门2   出勤率  84分 
部门2   领导满意度  89分 
部门2   工作效率    93分



最后,是想得到数据报表2的格式如下:
列1 列2 列3 列4
       出勤率   领导满意度 工作效率
部门1  90分       92分 95分
部门2  84分       89分 93分


注意,部门信息,指标信息,都是参数,都是可以动态变的。 


现在就是想 要把 我能的出来的数据报表1,变成数据报表2。

这个SQL怎么写想了N久了。 高手帮帮忙?

多谢!
------解决方案--------------------
引用:
在线等......


是这样吗:
create table tb(列1 varchar(10),	列2	varchar(20),列3 varchar(10))

insert into tb
select '部门1',   '出勤率',  '90分' union all
select '部门1',   '领导满意度',  '92分'  union all
select '部门1',   '工作效率',    '95分' union all
select '部门2',   '出勤率',  '84分' union all
select '部门2',   '领导满意度',  '89分'  union all
select '部门2',   '工作效率',    '93分'
go


declare @sql nvarchar(2000)

set @sql = ''


select @sql = @sql +',max(case when 列2=''' + 列2 +''' then 列3 else null end) as ['+列2+']' 
from tb
group by 列2

set @sql = 'select 列1' + @sql + ' from tb group by 列1' 

exec(@sql)
/*
列1 出勤率 工作效率 领导满意度
部门1 90分 95分 92分
部门2 84分 93分 89分
*/