• sqlserver行转列
--创建行转列表及插入数据
create table tb_RowConvertToColumn
(
username nvarchar(100) null,
course nvarchar(100) null,
score numeric(10,2) null
)
insert into tb_RowConvertToColumn(username,course,score) values('张三','语文',82)
insert into tb_RowConvertToColumn(username,course,score) values('张三','数学',85)
insert into tb_RowConvertToColumn(username,course,score) values('张三','外语',90)
insert into tb_RowConvertToColumn(username,course,score) values('李四','语文',86)
insert into tb_RowConvertToColumn(username,course,score) values('李四','数学',82)
insert into tb_RowConvertToColumn(username,course,score) values('李四','外语',92)
insert into tb_RowConvertToColumn(username,course,score) values('王五','语文',82)
insert into tb_RowConvertToColumn(username,course,score) values('王五','数学',94)
insert into tb_RowConvertToColumn(username,course,score) values('王五','外语',82) --1.静态sql行转列,该sql指定了转换的列头
select username 姓名,
MAX(case course when '语文' then score else 0 end) 语文,
MAX(case course when '数学' then score else 0 end) 数学,
MAX(case course when '外语' then score else 0 end) 外语
from tb_RowConvertToColumn
group by username
order by username
/*
姓名 语文 数学 外语
李四 86.00 82.00 92.00
王五 82.00 94.00 82.00
张三 82.00 85.00 90.00
*/ --2.静态sql行转列,该sql指定了转换的列头,该语句必须sqlserver2005及以上版本才能使用
select username 姓名,语文,数学,外语 from tb_RowConvertToColumn pivot(max(score) for course in(语文,数学,外语)) a
/*
姓名 语文 数学 外语
李四 86.00 82.00 92.00
王五 82.00 94.00 82.00
张三 82.00 85.00 90.00
*/
select * from tb_RowConvertToColumn pivot(max(score)for course in (语文,数学,外语)) a
/*
username 语文 数学 外语
李四 86.00 82.00 92.00
王五 82.00 94.00 82.00
张三 82.00 85.00 90.00
*/ --3.动态sql行转列,自动生成转换的列
declare @sql nvarchar(2000)
select distinct course into #tb_group from tb_RowConvertToColumn order by course desc--表头及排序
select @sql=ISNULL(@sql+',','')+'MAX(case course when '''+course+''' then score else 0 end) ['+course+']'
from #tb_group
set @sql='select username 姓名,'+@sql
+' from tb_RowConvertToColumn a'
+' group by username'
exec(@sql)
drop table #tb_group
/*
姓名 语文 外语 数学
李四 86.00 92.00 82.00
王五 82.00 82.00 94.00
张三 82.00 90.00 85.00
*/ --4.动态sql行转列,自动生成转换的列,该语句必须sqlserver2005及以上版本才能使用
declare @sql nvarchar(2000)
select @sql=ISNULL(@sql+',','')+course
from tb_RowConvertToColumn
group by course
set @sql='select * from tb_RowConvertToColumn pivot (max(score) for course in ('+@sql+')) a'
exec(@sql)
/*
username 数学 外语 语文
李四 82.00 92.00 86.00
王五 94.00 82.00 82.00
张三 85.00 90.00 82.00
*/
  • sqlserver列转行
--创建列转行表及插入数据
create table tb_ColumnConvertToRow
(
[姓名] nvarchar(100) null,
[语文] nvarchar(100) null,
[数学] nvarchar(100) null,
[外语] nvarchar(100) null
) insert into tb_ColumnConvertToRow(姓名,语文,数学,外语) values('李四',82,92,86)
insert into tb_ColumnConvertToRow(姓名,语文,数学,外语) values('王五',94,82,82)
insert into tb_ColumnConvertToRow(姓名,语文,数学,外语) values('张三',85,90,82) --1.静态sql列转行,当列头较少时使用
select * from
(
select 姓名,课程='语文',分数=语文 from tb_ColumnConvertToRow
union all
select 姓名,课程='数学',分数=数学 from tb_ColumnConvertToRow
union all
select 姓名,课程='外语',分数=外语 from tb_ColumnConvertToRow
) a
/*
姓名 课程 分数
李四 语文 82
王五 语文 94
张三 语文 85
李四 数学 92
王五 数学 82
张三 数学 90
李四 外语 86
王五 外语 82
张三 外语 82
*/ --2.静态sql列转行,当列头较少时使用,该语句必须sqlserver2005及以上版本才能使用
select 姓名,课程,分数 from tb_ColumnConvertToRow unpivot(分数 for 课程 in (语文,数学,外语)) a
/*
姓名 课程 分数
李四 语文 82
李四 数学 92
李四 外语 86
王五 语文 94
王五 数学 82
王五 外语 82
张三 语文 85
张三 数学 90
张三 外语 82
*/

sqlserver行列转换的更多相关文章

  1. sqlserver行列转换问题(网上搜集)

    (列->行) 一.FOR XML PATH 简单介绍              那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如 ...

  2. sqlserver 行列转换

    http://www.cnblogs.com/zhangzt/archive/2010/07/29/1787825.html PIVOT用于将列值旋转为列名(即行转列),在SQL Server 200 ...

  3. SQLServer行列转换PIVOT函数中聚合函数的使用意义及选择

    例子:https://blog.csdn.net/wikey_zhang/article/details/76849826 DECLARE @limitDay INT;SET @limitDay = ...

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

    可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P 完整语法: table_source PIVOT( 聚合函数(value_ ...

  5. 在Sqlserver下巧用行列转换日期的数据统计

    在Sqlserver下巧用行列转换日期的数据统计 前言 在SQLSERVER 中有很多统计函数的基础语法,有使用Group By 或 partition by 后配合Sum,Count(*) 等用法. ...

  6. sqlserver表分区与调优与行列转换

    转自: http://www.cnblogs.com/knowledgesea/p/3696912.html http://www.open-open.com/lib/view/open1418462 ...

  7. SQL 行列转换简单示例

    SQLSERVER 2005 以后提供了新的方式进行行列转换,下面是一个实例供参考: if object_id('tb') is not null drop table tbTest go ),季度 ...

  8. SqlServer2000下实现行列转换

    SqlServer2000下实现行列转换 2011-04-06 22:07:07|  分类: SQL Server |  标签:sqlserver  2000  行列转换  sql  |举报|字号 订 ...

  9. 简单的叙述下SQL中行列转换的小知识!

    行列转换对于工作还是学习中总是不可避免的会遇到(虽然本人还尚未工作,萌萌哒的学生一枚),解决的方法也有很多,我这里就总结一下我所想解决的问题以及怎么去解决的方法, 可能网上已经有很多类似的方法了,有的 ...

随机推荐

  1. 详解mysql int类型的长度值问题

    我的朋友海滨问我mysql在建表的时候int类型后的长度代表什么? 是该列允许存储值的最大宽度吗? 为什么我设置成int(1), 也一样能存10,100,1000呢. 当时我虽然知道int(1),这个 ...

  2. Redis系列-远程连接redis并给redis加锁

    假设两台redis服务器,ip分别为:192.168.1.101和192.168.1.103,如何在101上通过redis-cli访问103上的redis呢?在远程连接103之前,先讲下redis-c ...

  3. 【Docker】来自官方映像的 6 个 Dockerfile 技巧

    本文将根据我从官方镜像学到的经验,讲解编写Dockerfile的技巧.   1. 选择Debian  官方镜像的大多数Dockerfile,不管是直接还是通过其他镜像,都是基于Debian的.Dock ...

  4. java回顾巩固

    看视频复习java有一段时间了.虽然现在做的东西是net的,但是一直没忘记复习java. 更多的大概在这里. java变量的命名规则: (A)组成规则: 1:英文大小写字母 2:数字 3:$和_ (2 ...

  5. canvas API ,通俗的canvas基础知识(三)

    全文说到了三角形,圆形等相关图形的画法,不熟悉的同学可以出门右转,先看看前文,接下来继续我们的图形——曲线. 学过数学,或者是比较了解js 的同学都知道贝塞尔曲线,当然,在数学里面,这是一门高深的学问 ...

  6. Servlet之Cookie操作

    Java对cookie的操作比较简单,主要介绍下建立cookie和读取cookie,以及如何设定cookie的生命周期和cookie的路径问题. 1,建立一个无生命周期的cookie,即随着浏览器的关 ...

  7. Android中mesure过程详解

    我们在编写layout的xml文件时会碰到layout_width和layout_height两个属性,对于这两个属性我们有三种选择:赋值成具体的数值,match_parent或者wrap_conte ...

  8. CSDN客户端实现

    本文主要讲解实现了一个CSDN的安卓客户端,主要知识点如下 java爬虫获取网页数据 将java程序打包成jar包 Fragment+viewpager+TabPageIndicator实现Tab效果 ...

  9. 多个div 一行显示的处理方式

    1.方式一: 通过div的float属性,定义宽度,然后定义float属性和width的属性,实现多个div在一行显示: 2.方式二: 通过div的display的属性,至少进行2成div的displ ...

  10. chromium浏览器开发系列第四篇:如何调试最新chromium源码

    转自:http://blog.itpub.net/20687969/viewspace-1586513/ 附上上几篇文章地址,方便大家查看: 下载源码 编译源码 目录结构 接二连三的事情,时间比较紧张 ...