交叉表应用一 (报表动态表头)

来源:互联网 发布:百度云和阿里云哪个好 编辑:程序博客网 时间:2024/05/22 17:22

set nocount on
--建表
create table 课程表(id int,  课程  nvarchar(10),专业 varchar(8))
insert into 课程表
select 1,   '课程1' ,'专业1'       
union all select 2 , '课程2','专业1'
union all select 3 , '课程3' ,'专业1'                  

create table 成绩表(学号 nvarchar(10),K1 int,K2 int,K3 int,专业 varchar(8))
insert into 成绩表
select '学号1' ,   20   , 30 ,   50  ,'专业2'
union all select   '学号2' ,   30,   40,   60,'专业1'
union all select  '学号3'  ,  90 ,   80 ,   100,'专业1'

--查询
select * from 课程表
select * from 成绩表

declare @sql nvarchar(4000)
declare @专业 varchar(8)
set @专业= '专业1'
declare @count int
select @count=count(*)  from 课程表 where 专业= @专业
set @sql='select 学号'
declare @i int
set @i =1

while @i<=@count
 begin
 select @sql=@sql +', K' +cast(@i as nvarchar)+' as ''' + 
        课程+''''   from 课程表 where id =@i
 set @i=@i+1
 end

 exec(@sql + ' from 成绩表 where 专业='''+ @专业+'''')

--删表
drop table 课程表
drop table 成绩表

/*查询结果
id          课程         专业      
----------- ---------- --------
1           课程1        专业1
2           课程2        专业1
3           课程3        专业1

学号         K1          K2          K3          专业      
---------- ----------- ----------- ----------- --------
学号1        20          30          50          专业2
学号2        30          40          60          专业1
学号3        90          80          100         专业1

学号         课程1         课程2         课程3        
---------- ----------- ----------- -----------
学号2        30          40          60
学号3        90          80          100

原创粉丝点击