SQL的行列转换

【一】行转列

1,查询原始的数据

/***这次练习的主题,行转列,列转行***/select * from Scores

2,得到姓名,通过group by

select Student as ‘姓名‘from Scoresgroup by Studentorder by Student

3,再加上max, case……when

select Student as ‘姓名‘,max(case Subject when ‘语文‘ then Score else 0 end) as ‘语文‘ ,--如果这个行是“语文”,就选此行作为列max(case Subject when ‘英语‘ then Score else 0 end ) as ‘英语‘from Scoresgroup by Studentorder by Student

查看其它资料时,看到另外一种方法,用pivot

--group by, avg/max, pivot。这里用max和avg,结果都一样,有什么区别吗?有点不明白
--参考网上的资料,用法如下
/*
pivot(
  聚合函数(要转成列值的列名)
  for 要转换的列
  in(目标列名)
  )
*/
select Student as ‘姓名‘,
avg(语文) as ‘语文‘,avg(英语) as ‘英语‘from Scorespivot(    avg(Score) for Subject     in (语文,英语)    )as NewScoresgroup by Studentorder by Student asc

时间: 2024-10-17 20:11:04

SQL的行列转换的相关文章

sql server 行列转换

SQL 列转行 2011-04-22 16:13:41 好东西,转一下,嘿嘿. * 普通行列转换 (爱新觉罗.毓华 2007-11-18于海南三亚) 假设有张学生成绩表(tb)如下: Name Subject Result 张三 语文 74 张三 数学 83 张三 物理 93 李四 语文 74 李四 数学 84 李四 物理 94 */ ------------------------------------------------------------------------- /* 想变成

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

行列转换对于工作还是学习中总是不可避免的会遇到(虽然本人还尚未工作,萌萌哒的学生一枚),解决的方法也有很多,我这里就总结一下我所想解决的问题以及怎么去解决的方法, 可能网上已经有很多类似的方法了,有的比我的可能会更好,就当我记录一下自己的学习经历吧.这里我们列举一个关于股票的每日入账出账做一个统计然后整理数据,虽然例子可能不太合理, 但是不要太执着于这些细节,能说明问题就好,傻笑ing..... 1 列转行:按照某一列分组,将另一列作为行时列名可数,不变. 什么意思呢?话说多了反而不懂,放两张图

sql 时间行列转换求总和

先看表结构 USE [TestMyDB] GO /****** Object: Table [dbo].[Product] Script Date: 2015/9/25 16:09:39 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING OFF GO CREATE TABLE [dbo].[Product]( [ProductId] [VARCHAR](36) NOT NULL, [ProductN

12、SQL Server 行列转换

SQL Server 行转列 在SQL Server 2005中PIVOT 用于将列值转换为列名(行转列),在SQL Server 2000中是没有这个关键字的 只能用case语句实现. --创建测试数据库 use master go if ( exists (select * from sys.databases where name = 'webDB') ) drop database webDB go create database webDB on primary ( name = 'w

sql实现行列转换

姓名 科目 成绩 牛芬 语文 81 牛芬 数学 88 牛芬 英语 84 张三 语文 90 张三 数学 98 张三 英语 90 (表一) 现有一个表如(表一) 姓名 语文 数学 英语 牛芬 81 88 84 张三 90 98 90 (表二) 想要转换为(表二) sql:select  stuName as 姓名,chinese as 语文,math as 数学,english as 英文 from( select sutName, case subject when chinese then sc

SQL语句行列转换

创建表格 CREATE TABLE T2 (STU_NAME CHAR(5),COURSE CHAR(5),MARK INT NOT NULL) INSERT INTO T2 VALUES ('城南','马哲',70) INSERT INTO T2 VALUES ('城南','数学',65) INSERT INTO T2 VALUES ('城南','英语',58) INSERT INTO T2 VALUES ('城南','语文',79) INSERT INTO T2 VALUES ('李四','

Sql server行列转换

将列表转换为透视表的方法 SELECT kh as 款号,pm as 品名,ys as 颜色 ,isnull([95],0)as '95' ,isnull([100],0)as '100' ,isnull([105],0)as '105' ,isnull([110],0)as '110' ,isnull([115],0)as '115' FROM(select * from hj)as a pivot( max([sl]) for [cm] in([95],[100],[105],[110],[

SQL行列转换6种方法

在进行报表开发时,很多时候会遇到行列转换操作,很对开发人员针对于SQL级别行列转换操作一直不甚理解,今天正好抽空对其进行了一些简单的总结.这里主要列举3种可以实现SQL行列转换的方法,包括通用SQL解法以及Oracle支持解法. 一.测试数据 测试表依旧采用Oracle经典的scott模式下的dept表和emp表,结构如下: DEPT: create table DEPT ( DEPTNO NUMBER(2) not null, DNAME VARCHAR2(14), LOC VARCHAR2(

【转】SQL行列转换

原文地址:http://blog.csdn.net/kiki113/article/details/4105929 行列转换等经典SQL语句 1.--行列转换 原表:   姓名     科目   成绩           张三     语文    80           张三     数学    90           张三     物理    85           李四     语文    85           李四     物理    82           李四     英语