搜课云网 > 上海内威培训 > 资讯总汇 > sql中行列转换总结

sql中行列转换总结

机构:上海内威培训 时间:2016-01-27 08:51:21 点击:595

  /*-------------------行列互转-------------------*/

  /******** 以学生成绩为例子,比较形象易懂 整理人:中国风(Roy) 日期:2008.06.06 ************/

  --1、行互列 --> --> (Roy)生成測試數據

  if not object_id('Class') is null

  drop table Class

  Go

  Create table Class

  ([Student] nvarchar(2),[Course] nvarchar(2),[Score] int)

  Insert Class

  select N'张三',N'语文',78

  union all

  select N'张三',N'数学',87 union all

  select N'张三',N'英语',82 union all

  select N'张三',N'物理',90 union all

  select N'李四',N'语文',65 union all

  select N'李四',N'数学',77 union all

  select N'李四',N'英语',65 union all

  select N'李四',N'物理',85

  Go

  select * from class

  --2000方法:

  --动态:

  declare @s nvarchar(4000)

  set @s=''

  Select @s=@s+','+quotename([Course])

  +'=max(case when [Course]='+quotename([Course],'''') --quotename()使用有效的分隔标示符

  +' then [Score] else 0 end)' from Class

  group by[Course]

  exec

  ('select [Student]'+@s+' from Class group by [Student]')

  --生成静态:

  select [Student],

  [数学]=max(case when [Course]='数学' then [Score] else 0 end), --max()此处没有特殊意义,只是为了显示科目类字段,因为科目字段不在group by 字段中

  [物理]=max(case when [Course]='物理' then [Score] else 0 end),

  [英语]=max(case when [Course]='英语' then [Score] else 0 end),

  [语文]=max(case when [Course]='语文' then [Score] else 0 end)

  from Class group by [Student]

  GO

  了解更多关于数据库方面的知识,请访问上海数据库培训学校

师资介绍