1. 行列转换:
[sql] view plaincopy
  1. 姓名 课程 分数
  2. 张三 语文 74
  3. 张三 数学 83
  4. 张三 物理 93
  5. 李四 语文 74
  6. 李四 数学 84
  7. 李四 物理 94
  8. 想变成(得到如下结果):
  9. 姓名 语文 数学 物理
  10. ---- ---- ---- ----
  11. 李四 74   84   94
  12. 张三 74   83   93
  13. create table sc(姓名 varchar(10),课程 varchar(10),分数 float)
  14. insert into sc
  15. select '张三','语文',74
  16. union
  17. select '张三','数学',83
  18. union
  19. select '张三','物理',93
  20. union
  21. select '李四','语文',74
  22. union
  23. select '李四','数学',84
  24. union
  25. select '李四','物理',94
  26. 方法1:
  27. declare @sql varchar(max)
  28. set @sql='select '
  29. select @sql=@sql+', max(case when 课程='''+课程+''' then 分数 else '''' end)['+课程+']' from (select distinct 课程 from sc)t
  30. set @sql = STUFF(@sql,8,1,'')
  31. print @sql
  32. set @sql=@sql+' ,姓名 from sc group by 姓名'
  33. exec(@sql)
  34. 方法2:
  35. select 姓名,数学,物理,语文 from sc pivot( max(分数) for 课程 in(数学,物理,语文))t
  36. 方法3:
  37. declare @sql varchar(8000)
  38. select @sql = isnull(@sql + '],[' , '') + 课程 from sc group by 课程
  39. print @sql
  40. set @sql = '[' + @sql + ']'
  41. exec ('select * from (select * from tb) a pivot (max(分数) for 课程 in (' + @sql + ')) b')

行列置换:

[sql] view plaincopy
  1. 姓名  语文  数学   物理
  2. ----------------------------------
  3. 张三  80     90    85
  4. 李四  85     92    82
  5. 要求使用T-SQL语言实现以下结果:
  6. 课程  张三  李四
  7. ----------------------
  8. 语文  80    85
  9. 数学  90    92
  10. 物理  85    82
  11. drop table sc
  12. create table sc(姓名 varchar(10),语文 int,数学 int,物理 int)
  13. insert into sc
  14. select '张三',80,90,85
  15. union all
  16. select '李四',85,92,82
  17. select * from sc
  18. -------------这个过程不就是unpivot,有时间再补充?
  19. select * into sc1 from(
  20. select 姓名,'语文' 课程,语文 分数 from sc
  21. union
  22. select 姓名,'数学' 课程,数学 from sc
  23. union
  24. select 姓名,'物理' 课程,物理 from sc
  25. )t
[sql] view plaincopy
  1. 补充unpivot,和上面操作时同样的效果
[sql] view plaincopy
  1. select  姓名,课程,分数 into #sc1 from sc unpivot(分数 for 课程 in([语文],[数学],[物理]))a
[sql] view plaincopy
[sql] view plaincopy
  1. declare @sql varchar(8000)
  2. set @sql='select '
  3. select @sql=@sql+', max(case when 姓名='''+姓名+''' then 分数 else ''''end)['+姓名+']' from (select distinct 姓名 from
  4. sc1)t
  5. set @sql=stuff(@sql,8,1,'')
  6. set @sql=@sql+' ,课程 from sc1 group by 课程'
  7. print @sql
  8. exec(@sql)
[sql] view plaincopy
[sql] view plaincopy
  1. 补充动态pivot和unpiot
[sql] view plaincopy
  1. --------------pivot
  2. declare @sql varchar(8000)
  3. select @sql = isnull(@sql + '],[' , '') + 课程 from tb group by 课程
  4. print @sql
  5. set @sql = '[' + @sql + ']'
  6. exec ('select *  from (select * from tb) a pivot (max(分数) for 课程 in (' + @sql + ')) b')
  7. --------------unpivot
  8. declare @sql varchar(8000)
  9. select @sql = isnull(@sql + '],[' , '') + name from syscolumns where id=OBJECT_ID('tb') and colorder>1
  10. set @sql = '[' + @sql + ']'
  11. exec ('select 姓名,课程,分数 from (select * from tbtb) a unpivot (分数 for 课程 in (' + @sql + ')) b')

转载于:https://www.cnblogs.com/Impulse/articles/5129319.html

sql server行列转化和行列置换相关推荐

  1. Sql Server 2005 PIVOT的行列转换应用实例

    文章来源: http://ningoo.itpub.net/post/2149/281485 创建测试表,插入测试数据 Code create table test(id int,name varch ...

  2. SQl SerVer 数据库转化字母大小写

    正品水晶 转化大小写的函数(将大写转换成小写,小写转换成大写) selectdbo.F_Transition('Acc2DE5G') 输出 aCC2de5g alter function [dbo]. ...

  3. [转载]SQL Server行列转换实现

    一.Pivot和UnPivot介绍 1.Pivot介绍 PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVO ...

  4. SQL Server 2005之PIVOT/UNPIVOT行列转换

    SQL Server 2005之PIVOT/UNPIVOT行列转换 作者: NinGoo(http://ningoo.itpub.net) 发表于: 2007.04.18 11:49 分类: SQL ...

  5. SQL Server中行列转换 Pivot UnPivot (转载)

    SQL Server中行列转换 Pivot UnPivot PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现PIVOT的一般语法是:PIV ...

  6. 在SQL Server 2005中实现表的行列转换()

    PIVOT和UNPIVOT关系运算符是SQL Server 2005提供的新增功能,因此,对升级到SQL Server 2005的数据库使用PIVOT和UNPIVOT时,数据库的兼容级别必须设置为90 ...

  7. 【转】SQL Server中行列转换 Pivot UnPivot

    PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (-) )AS P ...

  8. SQL Server中行列转换 Pivot UnPivot

    PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (-) )AS P ...

  9. 从Sql server 2000 到 Oracle 10g数据库迁移数据类型转化

    2010-01-12 从Sql server 2000 到 Oracle 10g数据库迁移数据类型转化 文章分类:数据库 SqlServer 2k转换为Oracle 10g 列名 SqlServer数 ...

最新文章

  1. Pytorch中的广播机制
  2. 火爆 GitHub!这个 AI 神器究竟有什么魅力?
  3. 用pkg给手机装linux,pkg-config的使用方法
  4. Linux-下载传输并安装启动Tomcat
  5. matlab 状态估计,基于_当前_统计模型的目标状态估计MATLAB 实现
  6. java 格式化小数_java-如何格式化小数位数精度
  7. [转载] Java字符串分割方法
  8. 强化学习《基于策略 - on plolicy - off plolicy》
  9. mysql ajax excel文件_关于导入EXCEL和AJAX
  10. python输出命令_Python中的命令输出解析
  11. CSDN、博文视点名家讲坛之夏昕、林信良谈Spring框架
  12. 高考数学47分学计算机,从57分到高考数学131分,4个月的时间我竟创造了这个传奇!...
  13. win7打开计算机一片空白,Win7系统打开文件夹查看选项发现一片空白怎么办
  14. 你是如何看待saas行业
  15. “渴了么”软件详细说明书
  16. LibVLC —— 本地音视频例子、Qt播放例子
  17. 前端异常监控平台对比
  18. 《女侦探司马楠之箱尸谜案》横店开机 花潼冯荔军热血联手破奇案
  19. ipad上创建html5文件,为 iBooks Author 创建 HTML5 小组件
  20. java 图片加密

热门文章

  1. SQLSERVER对数据表进行分区
  2. 互联网项目管理流程(SOP)总结
  3. mysql用户及数据库的创建及权限的更改
  4. postgresql基本使用(一)
  5. C# 连接SQL 连接字符串
  6. 算法设计方法之 贪婪算法
  7. CMake使用详解一(单文件编译)
  8. Python中的字符串方法
  9. android 类的设计,Android App的类响应式设计
  10. python 计算器 tkinter_python -Tkinter 实现一个小计算器功能