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