标题 | SQL Server 表交叉显示及实现方法 |
内容 | 假设有张学生成绩表(t)如下: Name Subject Result 张三 语文73 张三 数学83 张三 物理93 李四 语文74 李四 数学84 李四 物理94 想变成 姓名 语文 数学 物理 张三 738393 李四 748494 代码 create table #t ( Name varchar(10) , Subject varchar(10) , Result int ) insert into #t(Name , Subject , Result) values('张三','语文','73') insert into #t(Name , Subject , Result) values('张三','数学','83') insert into #t(Name , Subject , Result) values('张三','物理','93') insert into #t(Name , Subject , Result) values('李四','语文','74') insert into #t(Name , Subject , Result) values('李四','数学','83') insert into #t(Name , Subject , Result) values('李四','物理','93') declare @sql varchar(8000) set @sql = 'select Name as 姓名' select @sql = @sql + ' , sum(case Subject when ''' + Subject + ''' then Result end) [' + Subject + ']' from (select distinct Subject from #t) as a set @sql = @sql + ' from #t group by name' exec(@sql) drop table #t --结果 姓名 数学 物理 语文 ---------- ----------- ----------- ----------- 李四 83 93 74 张三 83 93 73 如果上述两表互相换一下:即 姓名 语文 数学 物理 张三 738393 李四 748494 想变成 Name Subject Result 张三 语文73 张三 数学83 张三 物理93 李四 语文74 李四 数学84 李四 物理94 代码 create table #t ( 姓名 varchar(10) , 语文 int , 数学 int , 物理 int ) insert into #t(姓名 , 语文 , 数学 , 物理) values('张三',73,83,93) insert into #t(姓名 , 语文 , 数学 , 物理) values('李四',74,84,94) select 姓名 as Name,'语文' as Subject,语文 as Result from #t union select 姓名 as Name,'数学' as Subject,数学 as Result from #t union select 姓名 as Name,'物理' as Subject,物理 as Result from #t order by 姓名 desc drop table #t Name Subject Result ---------- ------- ----------- 张三 数学 83 张三 物理 93 张三 语文 73 李四 数学 84 李四 物理 94 李四 语文 74 (所影响的行数为 6 行) |
随便看 |
|
在线学习网考试资料包含高考、自考、专升本考试、人事考试、公务员考试、大学生村官考试、特岗教师招聘考试、事业单位招聘考试、企业人才招聘、银行招聘、教师招聘、农村信用社招聘、各类资格证书考试等各类考试资料。