sqlserver 行转列、列转行[转]

转自:http://www.cnblogs.com/luofuxian/archive/2012/02/23/2364328.html

Sql Server 行转列、列转行

创建表:

CREATE TABLE [dbo].[tbl_Student](    [ID] [int] IDENTITY(1,1) NOT NULL,    [学生ID] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,    [学生姓名] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,    [课程ID] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,    [课程名称] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,    [成绩] [int] NULL,    [教师ID] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,    [教师姓名] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL) ON [PRIMARY]

插入数据:

insert into tbl_Student values(‘S3‘,‘王五‘,‘K4        ‘,‘政治‘,53,‘T4‘,‘赵老师‘);insert into tbl_Student values(‘S1‘,‘ 张三 ‘,‘K1        ‘,‘数学‘,61,‘T1‘,‘张老师‘);insert into tbl_Student values(‘S2‘,‘李四‘,‘K3        ‘,‘英语‘,88,‘T3‘,‘李老师‘);insert into tbl_Student values(‘S1‘,‘  张三 ‘,‘K4        ‘,‘政治‘,77,‘T4‘,‘赵老师‘);insert into tbl_Student values(‘S2‘,‘李四‘,‘K4        ‘,‘政治‘,67,‘T5‘,‘周老师‘);insert into tbl_Student values(‘S3‘,‘王五‘,‘K2        ‘,‘语文‘,90,‘T2‘,‘王老师‘);insert into tbl_Student values(‘S3‘,‘王五‘,‘K1        ‘,‘数学‘,55,‘T1‘,‘张老师‘);insert into tbl_Student values(‘S1‘,‘ 张三 ‘,‘K2        ‘,‘语文‘,81,‘T2‘,‘王老师‘);insert into tbl_Student values(‘S4‘,‘赵六‘,‘K2        ‘,‘语文‘,59,‘T1‘,‘王老师‘);insert into tbl_Student values(‘S1‘,‘ 张三 ‘,‘K3        ‘,‘英语‘,37,‘T3‘,‘李老师‘);NULL

行专列

方法1:

select 学生姓名,课程ID,成绩,教师ID,教师姓名,max(case 课程名称 when ‘政治‘ then 成绩 else 0 end) 政治, max(case 课程名称 when ‘语文‘ then 成绩 else 0 end) 语文,max(case 课程名称 when ‘数学‘ then 成绩 else 0 end) 数学,max(case 课程名称 when ‘英语‘ then 成绩 else 0 end) 英语from tbl_Student group by 学生姓名,课程ID,成绩,教师ID,教师姓名

方法2:

select *from (select * from tbl_Student) a pivot (max(成绩) for 课程名称 in (语文,数学,英语,政治)) b

结果如图:


列转行:

创建表:

CREATE TABLE [dbo].[tbl_列转行测试](    [UserID] [int] NULL,    [UserNo] [int] NULL,    [A] [int] NULL,    [B] [int] NULL,    [C] [int] NULL) ON [PRIMARY]

插入数据:

UserID     USERNo.         A           B            C
1                 1               11          22          33

方法1:

SELECT  USERID,USERNO,tType=attributeFROM (select * from tbl_列转行测试)a  UNPIVOT  (    value FOR attribute IN(A, B,C)  ) AS UPV

结果如图:

时间: 2024-10-12 17:22:52

sqlserver 行转列、列转行[转]的相关文章

数据库 行转列 列转行详解

目录结构如下: 行转列 列转行 [一].行转列 1.1.初始测试数据 表结构:TEST_TB_GRADE create table TEST_TB_GRADE ( ID        NUMBER(10) not null, USER_NAME VARCHAR2(20 CHAR), COURSE    VARCHAR2(20 CHAR), SCORE     FLOAT ) [sql] view plaincopy create table TEST_TB_GRADE ( ID        N

MSSQLServer 纵向表转横向表 横向表转纵向表 行转列 列转行

MSSQLServer 纵向表转横向表  横向表转纵向表 建表语句及插入数据语句: CREATE TABLE Test_y( [Name] [nchar](10) NULL, [Course] [nchar](10) NULL, [Grade] [int] NULL ) insert into Test_y values ('张三','语文',75); insert into Test_y values ('张三','数学',80); insert into Test_y values ('张三

sqlserver 行转列 语文,数学,物理,化学

数据库查询行转列 1.原数据库值 stdname stdsubject result 张三 语文 80 张三 数学 90 张三 物理 85 李四 语文 85 李四 数学 92 李四 物理 82 李四 化学 82 李四 化学 82 2.要得到如下表 stdname 语文 数学 物理 化学 李四 85 92 82 164 张三 80 90 85 NULL 3.实现方法 --第一种 调用行转列函数 select * from (select stdname,stdsubject,result from

Sql server 中将数据行转列列转行(二)

老规矩,先弄一波测试数据,数据填充代码没有什么意义,先折叠起来: /* 第一步:创建临时表结构 */ CREATE TABLE #Student --创建临时表 ( StuName nvarchar(20), --学生名称 Chinese int, Math int, English int ) DROP TABLE #Student --删除临时表 SELECT * FROM #Student --查询所有数据 INSERT INTO #Student(StuName,Chinese,Math

Oracle 多行变一列的方法

多行变一列的方法有很多,觉得这个第一眼看懂了当时就用的这个办法. 情况是这样的.以下数据前几列是一样的,需要把VAT_VALUE_CHAR 的值放在同一行上. SELECT * FROM ps_vat_defaults defaults WHERE defaults.vat_driver = 'VAT_ENT_RGSTRN' AND defaults.vat_driver_key1 = 'AMB19' AND defaults.vat_driver_key2 = 'DEU' AND vat_de

第一课 矩阵的行图像与列图像(麻省理工公开课:线性代数)【转载】

转载自:http://blog.csdn.net/a352611/article/details/48602207 仅用于个人笔记. 目录(?)[-] 从方程组到矩阵 row picture 行图像 column picture 列图像 本系列笔记为方便日后自己查阅而写,更多的是个人见解,也算一种学习的复习与总结,望善始善终吧~ 1. 从方程组到矩阵  矩阵的诞生是为了用一种简洁的方式表达线性方程组 个人理解来说就是为了更好的描述和解决 Ax = b 从系统的角度来理解: A 就是我们的系统 x

行存储和列存储

传统的行式数据库将一个个完整的数据行存储在数据页中.这种方式在大数据量查询的时候会出现以下问题 1.在没有索引的情况下,会把一行全部查出来,查询会使用大量IO 2.虽然建立索引和物化视图可以可以快速定位列,但是也需要花费大量时间 但是如果处理查询时需要用到大部分的数据列,这种方式在磁盘IO上是比较高效的. 一般来说,OLTP(Online Transaction Processing,联机事务处理)应用适合采用这种方式. 一个OLAP类型的查询可能需要访问几百万甚至几十亿个数据行,且该查询往往只

Oracle 多行转多列

Oracle 多行转多列,列值转为列名 前段时间做调查问卷,客户创建自定义问卷内容,包括题目和选项内容; 之后需要到处问卷明细,,,,麻烦来咯 于是到网上到处搜索,没有直接结果;于是又找各种相似的,,终于功夫不负有心人 然后最终自己写出来了,decode才是核心 废话不多说,看图 需求示例图表: 存储过程,嘿嘿: 1 create or replace procedure NAG_QUESTIONERSULT_EXP( 2 V_QID in number, 3 C_Title out sys_r

如何获取ResultSet的行数和列数

当我们执行数据库查询返回一个ResultSet的时候,很多情况下我们需要知道这个ResultSet的大小,即它的行数和列数.我们知道它的列数可以通过resultSet.getMetaData().getColumnCount()很容易地得到,然而,java API没有提供直接访问ResultSet行数的接口. 这个时候,有三个办法可以解决: 1.改用select count语句,然后直接从ResultSet里面获取结果: try { Statement statement = connectio

html5的行标签与列标签

html5的标签很多,这里不一一列举.下面只将常用的一些html5的行标签和列标签进行了分类总结,方便大家学习借鉴.注意:一些标签可在css样式中进行行标签与列标签的互相转换,这里所列举的标签没有进行任何样式的设置,所有列标签和行标签经本人亲测有效.块标签: <h1>一级标题 <h2>二级标题 <h3>三级标题 <h4>四级标题 <h5>五级标题 <h6>六级标题 <ul>无序列表 <ol>有序列表 <d