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

该博客主要展示了SQL操作示例,包括创建课程表和成绩表,向表中插入数据,使用动态SQL语句根据专业筛选成绩表数据并将课程编号替换为课程名进行查询,最后删除创建的表,呈现了完整的SQL操作流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值