SQL Server 表交叉显示及实现方法
发布时间:2020-12-12 12:38:53 所属栏目:MsSql教程 来源:网络整理
导读:假设有张学生成绩表(t)如下: Name Subject Result 张三 语文 73 张三 数学 83 张三 物理 93 李四 语文 74 李四 数学 84 李四 物理 94 想变成 姓名 语文 数学 物理 张三 73 83 93 李四 74 84 94 代码 create table #t ( Name varchar(10), Subject varchar(1
假设有张学生成绩表(t)如下: ( Name varchar(10), Subject varchar(10), Result int ) insert into #t(Name,Subject,Result) values('张三','语文','73') insert into #t(Name,'数学','83') insert into #t(Name,'物理','93') insert into #t(Name,Result) values('李四','74') insert into #t(Name,'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 如果上述两表互相换一下:即 ( 姓名 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 行) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- sql-server-2008 – 如何让SQL Server Managemen
- sql-server – 没有数据更改的UPDATE性能
- sql-server – 测试是否有任何列为NULL
- 简单统计SQLSERVER用户数据表大小(包括记录总数和
- sql-server-2008 – 开发人员的POV在SQL Server
- tsql – 查看SSRS报告生成的SQL查询的简单方法?
- 如何使用T-SQL读取文本文件?
- SQLServer Case具有两种格式:简单Case函数和Case
- sql-server-2008-r2 – SQL Server“Audit Logou
- sql-server – 集群索引对数据库性能的影响
热点阅读