Sql 行转列问题总结】的更多相关文章

SQL 行转列和列转行 行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过了,却没有系统性的认识和总结过.为了加深认识,再总结一次. 行列互转,可以分为静态互转,即事先就知道要处理多少行(列);动态互转,事先不知道处理多少行(列). 1 --创建测试环境 2 USE tempdb; 3 GO 4 5 IF OBJECT_ID('dbo.Orders') IS NOT NU…
SQL行转列汇总 PIVOT 用于将列值旋转为列名(即行转列),在 SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT 的一般语法是:PIVOT(聚合函数(列) FOR 列 in (-) )AS P 注意:PIVOT.UNPIVOT是SQL Server 的语法,使用需修改数据库兼容级别(在数据库属性 ) SQL2008 中可以直接使用 完整语法: table_source PIVOT( 聚合函数(value_column) FOR pivot_column IN(<c…
转载:http://www.cnblogs.com/newwind521/archive/2010/11/25/1887203.html sql 行专列 列转行 普通行列转换 /* 标题:普通行列转换(version 2.0) 作者:爱新觉罗.毓华 时间:2008-03-09 地点:广东深圳 说明:普通行列转换(version 1.0)仅针对sql server 2000提供静态和动态写法,version 2.0增加sql server 2005的有关写法.  问题:假设有张学生成绩表(tb)如…
原文:sql 行转列 PIVOT 列转行 UNPIVOT 一: 现有表一(t_table1),想转为表二(t_table2)的格式. 表一: 年 公司 收入 2013 公司1 12 2013 公司2 22 2013 公司3 32 2012 公司1 42 2012 公司2 52 2012 公司3 62 表二: 年 公司1 公司2 公司3 2012 42 52 62 2013 12 22 32 可使用sql2005之后提供的PIVOT 具体操作如下: select  *  from   t_tabl…
原文:sql 行转列总结 PIVOT UNPIVOT的用法 PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (-) )AS P 完整语法: table_source PIVOT( 聚合函数(value_column) FOR pivot_column IN(<column_list>) ) UNPIVOT用于将列明转为列值(即列转行),在SQL Server 2…
参考文章: http://www.williamsang.com/archives/1508.html 情景简介 学校里面记录成绩,每个人的选课不一样,而且以后会添加课程,所以不需要把所有课程当作列.数据库grade里面数据如下图,假定每个人姓名都不一样,作为主键.本文以MySQL为基础,其他数据库会有些许语法不同. 数据库数据: 处理后效果: 下面介绍三种方法: 方法一: 1 2 3 4 5 SELECT DISTINCT  a.name, (SELECT score FROM grade b…
SQL 行转列,列转行 行列转换在做报表分析时还是经常会遇到的,今天就说一下如何实现行列转换吧. 行列转换就是如下图所示两种展示形式的互相转换 行转列 假如我们有下表: SELECT * FROM student PIVOT ( SUM(score) FOR subject IN (语文, 数学, 英语) ) 通过上面 SQL 语句即可得到下面的结果 PIVOT 后跟一个聚合函数来拿到结果,FOR 后面跟的科目是我们要转换的列,这样的话科目中的语文.数学.英语就就被转换为列.IN 后面跟的就是具…
行列互转 复制代码 create table test(id ),quarter int,profile int) insert into test values(,,) insert into test values(,,) insert into test values(,,) insert into test values(,,) insert into test values(,,) insert into test values(,,) insert into test values(…
行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过了,却没有系统性的认识和总结过.为了加深认识,再总结一次. 行列互转,可以分为静态互转,即事先就知道要处理多少行(列);动态互转,事先不知道处理多少行(列). ) , , );, , );, , );, , );, , );, , );, , );, , );, , );, , );, , );GO 行转列-静态方案: ]…
行转列问题总结 1.行转列 ---1.最简单的行转列/* 问题:假设有张学生成绩表(tb)如下:姓名 课程 分数张三 语文 74张三 数学 83张三 物理 93李四 语文 74李四 数学 84李四 物理 94 想变成(得到如下结果): 姓名 语文 数学 物理 李四 74   84   94张三 74   83   93*/--测试用IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]GOcreate table tb(姓名 varchar(10) ,…
PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P 完整语法: table_source PIVOT( 聚合函数(value_column) FOR pivot_column IN(<column_list>) ) UNPIVOT用于将列明转为列值(即列转行),在SQL Server 2000可以用UNION来实现 完整语法: table_sou…
行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过了,却没有系统性的认识和总结过.为了加深认识,再总结一次. 行列互转,可以分为静态互转,即事先就知道要处理多少行(列);动态互转,事先不知道处理多少行(列). --创建测试环境 USE tempdb; GO IF OBJECT_ID('dbo.Orders') IS NOT NULL DROP TABLE dbo.Orde…
---1.最简单的行转列/* 问题:假设有张学生成绩表(tb)如下:姓名 课程 分数张三 语文 74张三 数学 83张三 物理 93李四 语文 74李四 数学 84李四 物理 94 想变成(得到如下结果): 姓名 语文 数学 物理 李四 74   84   94张三 74   83   93*/--测试用 IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb] GO ) , 课程 ) , 分数 int) ) ) ) ) ) ) go --SQL SERV…
原文地址:http://www.cnblogs.com/kerrycode/archive/2010/07/28/1786547.html 行转列,列转行是我们在开发过程中经常碰到的问题.行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SERVER 2005 新增的运算符PIVOT来实现.用传统的方法,比较好理解.层次清晰,而且比较习惯. 但是PIVOT .UNPIVOT提供的语法比一系列复杂的SELECT...CASE 语句中所指定的语法更简单.更具可读性.下面我们通过几个简…
说明:本实例是以 SQL Server 2005 为运行环境的. 准备工作:创建一个名为 DB 的数据库(CREATE DATABASE DB). 一.T-SQL 行转列 1.创建如下表 CREATE  TABLE [Scores] ( [ID] INT IDENTITY(1,1), --自增标识 [StuNo] INT,                         --学号 [Subject] NVARCHAR(30),     --科目 [Score] FLOAT            …
原文: http://blog.csdn.net/jx_870915876/article/details/52403472 add by zhj: 本文是以MySQL为例说明的,但其实它适用于所有关系型数据库. 行转列的需求如下,可以发现,行转列时其实是先group by,然后将每个组中的行转为列,使用case-when + 聚合函数, 每个由行转为列的列,都要使用case-when或when-case语句.case-when是怎么作用的呢?组中的每行都经过case-when, 如果组中有N行…
前言 开发中我们经常会用到行转列,这里记录一下我在项目中实现行转列的思路.需求:报表模块,统计某机房机架的不同状态(1 空闲  2 预占  3 占用)的数量(真实需求更为复杂,这里只是讨论技术,简化一下) decode函数 以下介绍摘自百度百科: DECODE函数是ORACLE PL/SQL的功能强大的函数之一,以其简洁的运算方式,可控的数据模型和灵活的格式转换而闻名.目前还只有ORACLE公司的SQL提供了此函数,其它数据库厂商的SQL实现还没有此功能. 在DECODE的语法中,实际上就是这样…
原文地址:https://www.cnblogs.com/linJie1930906722/p/6036714.html 在做数据统计的时候,行转列,列转行是经常碰到的问题.case when方式太麻烦了,而且可扩展性不强,可以使用 PIVOT,UNPIVOT比较快速实现行转列,列转行,而且可扩展性强 一.行转列 1.测试数据准备 CREATE TABLE [StudentScores] ( [UserName] NVARCHAR(20), --学生姓名 [Subject] NVARCHAR(3…
PIVOT 用于将列值旋转为列名(即行转列),在 SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT 的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P 注意:PIVOT.UNPIVOT是SQL Server 2005 的语法,使用需修改数据库兼容级别(在数据库属性->选项->兼容级别改为   90 ) SQL2008 中可以直接使用 完整语法: table_source PIVOT( 聚合函数(value_column) FOR pivo…
行转列,列转行是我们在开发过程中经常碰到的问题.行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SERVER 2005 新增的运算符PIVOT来实现.用传统的方法,比较好理解.层次清晰,而且比较习惯. 但是PIVOT .UNPIVOT提供的语法比一系列复杂的SELECT...CASE 语句中所指定的语法更简单.更具可读性.下面我们通过几个简单的例子来介绍一下列转行.行转列问题. 我们首先先通过一个老生常谈的例子,学生成绩表(下面简化了些)来形象了解下行转列 CREATE TAB…
公司实施小姑娘要我写一个SQL给她 需求如下: 现在有表A,字段 id code parentid backres,现数据如下 id code parentid backres 1 A 5 2 B 5 3 C 5 4 D 5 5 E 6 6 F 我想得到的是 id code parentid backres 1 A 5 B;C;D; 2 B 5 A;C;D; 3 C 5 A;B;D; 4 D 5 A;B;C; 5 E 6 6 F 意思是,根据Parentid得到ABCD都属于E,然后将ABCD的…
行转列,列转行是我们在开发过程中经常碰到的问题.行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SERVER 2005 新增的运算符PIVOT来实现.用传统的方法,比较好理解.层次清晰,而且比较习惯. 但是PIVOT .UNPIVOT提供的语法比一系列复杂的SELECT...CASE 语句中所指定的语法更简单.更具可读性.下面我们通过几个简单的例子来介绍一下列转行.行转列问题. 我们首先先通过一个老生常谈的例子,学生成绩表(下面简化了些)来形象了解下行转列 CREATE TAB…
1.PIVOT 用于将列值旋转为列名(即行转列) PIVOT 的一般语法是:PIVOT(聚合函数(列名) FOR 列名 in (列值1,…) )AS P select * from TB pivot (sum(income) for week in(星期一,星期二,星期三)) t SELECT * FROM tb pivot( MAX(分数) FOR 课程 IN (语文,数学,物理))a 旋转前 姓名       课程       分数 ---------- ---------- -------…
这是 创建数据库的脚本文件 CREATE TABLE [dbo].[stu]( [学号] [nvarchar](255) NOT NULL, [姓名] [nvarchar](255) NULL, [性别] [nvarchar](255) NULL, [专业] [nvarchar](255) NULL, [院系] [nvarchar](255) NULL ) ON [PRIMARY] GO INSERT [dbo].[stu] ([学号], [姓名], [性别], [专业], [院系]) VALU…
一.原数据: SELECT inman,indate FROM [fp_db].[dbo].[ppezhpbb] WHERE indate > '2016-5-1' AND indate < '2016-6-1' ORDER BY indate 二.转换后(动态拼接SQL): --数据先存临时表 SELECT inman,indate INTO #tab FROM [fp_db].[dbo].[ppezhpbb] WHERE indate > '2016-5-1' AND indate…
--创建一个临时表用来存储数据 create table #tmp_SNValue_Table (FieldName nvarchar(20), [Value] nvarchar(max)) insert into #tmp_SNValue_Table select 'DDUDF01','123456789012345' insert into #tmp_SNValue_Table select 'DDUDF01','123456789012346' insert into #tmp_SNVal…
转自http://www.cnblogs.com/lhj588/p/3315876.html -- 经典行列转化DROP TABLE IF EXISTS TabName;CREATE TABLE TabName ( Id INT(11) NOT NULL AUTO_INCREMENT, NAME VARCHAR(20) DEFAULT NULL, DATE DATE DEFAULT NULL, Scount INT(11) DEFAULT NULL, PRIMARY KEY (Id)) ENGI…
CREATE TABLE [StudentScores] ( ), --学生姓名 ), --科目 [Score] FLOAT, --成绩 ) select * from [StudentScores] SELECT * FROM [StudentScores] /*数据源*/ AS P PIVOT ( SUM(Score/*行转列后 列的值*/) FOR p.Subject/*需要行转列的列*/ IN ([语文],[数学],[英语],[生物]/*列的值*/) ) AS T where usern…
适用场景:需要将行数据转换成列数据 例子: 现在有一个学生的成绩表 但是我们需要将每个学生的成绩汇集到一条数据上,这时候就可以用到行转列. 代码如下 一.不使用  PIVOT SELECT ),[Stu_ID])) AS 学生 ,) END) AS 语文成绩 ,) END) AS 数学成绩 ,) END) AS 英语成绩 ,,),)) AS 平均成绩 FROM [EFDemo].[dbo].[Table_1] GROUP BY Stu_ID 二.使用 PIVOT SELECT * FROM [E…
一.行转列的使用 1.问题 hive如何将 a       b       1a       b       2a       b       3c       d       4c       d       5c       d       6 变为: a       b       1,2,3c       d       4,5,6 2.数据 test.txt a       b       1 a       b       2 a       b       3 c       d …