工作中,我们经常会碰到行转列的情况

这里我介绍几种简单的方法--行转列

1.oracle的pivot函数

原表

使用pivot函数:

with temp as(
select '四川省' nation ,'成都市' city,'第一' ranking from dual union all
select '四川省' nation ,'绵阳市' city,'第二' ranking from dual union all
select '四川省' nation ,'德阳市' city,'第三' ranking from dual union all
select '四川省' nation ,'宜宾市' city,'第四' ranking from dual union all
select '湖北省' nation ,'武汉市' city,'第一' ranking from dual union all
select '湖北省' nation ,'宜昌市' city,'第二' ranking from dual union all
select '湖北省' nation ,'襄阳市' city,'第三' ranking from dual
)
select * from (select nation,city,ranking from temp)pivot (max(city) for ranking in ('第一' as 第一,'第二' AS 第二,'第三' AS 第三,'第四' AS 第四));

说明:pivot(聚合函数 for 列名 in(类型)),其中 in(‘’) 中可以指定别名,in中还可以指定子查询,比如 select distinct ranking from temp

SELECT * FROM [StudentScores] /*数据源*/
AS P
PIVOT
(SUM(Score/*行转列后 列的值*/) FOR p.Subject/*需要行转列的列*/ IN ([语文],[数学],[英语],[生物]/*列的值*/)
) AS T

2.使用max结合decode函数

原表

使用max结合decode函数

with temp as(
select '四川省' nation ,'成都市' city,'第一' ranking from dual union all
select '四川省' nation ,'绵阳市' city,'第二' ranking from dual union all
select '四川省' nation ,'德阳市' city,'第三' ranking from dual union all
select '四川省' nation ,'宜宾市' city,'第四' ranking from dual union all
select '湖北省' nation ,'武汉市' city,'第一' ranking from dual union all
select '湖北省' nation ,'宜昌市' city,'第二' ranking from dual union all
select '湖北省' nation ,'襄阳市' city,'第三' ranking from dual
)
select nation,
max(decode(ranking, '第一', city, '')) as 第一,
max(decode(ranking, '第二', city, '')) as 第二,
max(decode(ranking, '第三', city, '')) as 第三,
max(decode(ranking, '第四', city, '')) as 第四
from temp group by nation;

说明:decode的用法:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)

该函数的含义如下:

IF 条件=值1 THENRETURN(翻译值1)
ELSIF 条件=值2 THENRETURN(翻译值2)......
ELSIF 条件=值n THENRETURN(翻译值n)
ELSERETURN(缺省值)
END IF

3.使用max结合case when 函数

原表

使用max结合case when 函数

select case when grade_id='1' then '一年级'

when grade_id='2' then '二年级'

when grade_id='5' then '五年级'

else null end "年级",

max(case when subject_name='语文'  then max_score

else 0 end) "语文" ,

max(case when subject_name='数学'  then max_score

else 0 end) "数学" ,

max(case when subject_name='政治'  then max_score

else 0 end) "政治"

from dim_ia_test_ysf

group by

case when grade_id='1' then '一年级'

when grade_id='2' then '二年级'

when grade_id='5' then '五年级'

else null end

下面是介绍列转行方法--列转行

原表

with temp as(
select '四川省' nation ,'成都市' 第一,'绵阳市' 第二,'德阳市' 第三,'宜宾市' 第四  from dual union all
select '湖北省' nation ,'武汉市' 第一,'宜昌市' 第二,'襄阳市' 第三,'' 第四   from dual
)
select nation,name,title from
temp
unpivot
(name for title in (第一,第二,第三,第四))t

说明:unpivot(自定义列名/*列的值*/ for 自定义列名/*列名*/ in(列名))

Oracle 行转列——列转行相关推荐

  1. SQL 行转列 列转行 Oracle转置函数函数pivot、unpivot 解决wm_concat 没有排序

    https://www.cnblogs.com/mellowsmile/p/4642306.html HH 终风且暴,顾我则笑,谑浪笑敖,中心是悼. 终风且霾,惠然肯来,莫往莫来,悠悠我思. 博客园 ...

  2. ORACLE行转列和列转行

    文章目录 ORACLE行转列和列转行 定义 ORACLE-行转列-unpivot 数据准备 行转列使用 ORACLE-列转行-pivot 数据准备 列转行使用 ORACLE行转列和列转行 定义 行转列 ...

  3. oracle列转行 空行,Oracle 行转列(不固定行数的行转列,动态)(转)

    SQLSERVER :行列转换例子:  http://www.cnblogs.com/gaizai/p/3753296.html#_labelFour 1. Oracle 11g之后新增了行列转换的函 ...

  4. oracle 行转列的sql,Oracle行转列、列转行的Sql语句总结

    目录结构如下: 行转列 列转行 [一].行转列 1.1.初始测试数据 表结构:TEST_TB_GRADE sql代码 create table TEST_TB_GRADE ( ID NUMBER(10 ...

  5. Oracle 多行变一列的方法

    多行变一列的方法有很多,觉得这个第一眼看懂了当时就用的这个办法. 情况是这样的.以下数据前几列是一样的,需要把VAT_VALUE_CHAR 的值放在同一行上. SELECT * FROM ps_vat ...

  6. oracle 行转列后列名,Oracle 多行转多列,列值转为列名

    前段时间做调查问卷,客户创建自定义问卷内容,包括题目和选项内容; 之后需要导出问卷明细,,,,麻烦来咯 于是到网上到处搜索,没有直接结果;于是又找各种相似的,,终于功夫不负有心人 然后最终自己写出来了 ...

  7. oracle一列多行转一行多列表示,Oracle 多行转多列,列值转为列名

    前段时间做调查问卷,客户创建自定义问卷内容,包括题目和选项内容; 之后需要导出问卷明细,,,,麻烦来咯 于是到网上到处搜索,没有直接结果;于是又找各种相似的,,终于功夫不负有心人 然后最终自己写出来了 ...

  8. SQL Server 行转列,列转行。多行转成一列

    一.多行转成一列(并以","隔开) 表名:A 表数据: 想要的查询结果: 查询语句: SELECT name ,value = ( STUFF(( SELECT ',' + val ...

  9. sqlserver中某列转成以逗号连接的字符串及逆转、数据行转列列转行

    Sql Server 列转逗号隔开的字符串 和 逆转 https://www.cnblogs.com/duanyuerui/p/7567692.html Sql server 中将数据行转列列转行(一 ...

  10. oracle行转列处理方法,oracle行转列解决办法

    oracle行转列 Cust prod 1       A 1       B 1       C 2       A 2       B Return Cust     Prod1     Prod ...

最新文章

  1. 6.5 如何确定聚类数-机器学习笔记-斯坦福吴恩达教授
  2. 浮躁的国内测试界-2006年测试人员招聘感悟
  3. 实例解析Java class文件格式
  4. 2019编译ffepeg vs_如何在windows10下使用vs2017编译最新版本的FFmpeg和ffplay
  5. python中的序列化与反序列化
  6. JAVA学习(十)__MessageFormat用法
  7. C语言入夏标志,青岛真的入夏了吗?青岛20°C的梗是什么?
  8. Docker : Docker 查看容器 IP 地址以及相关信息
  9. hibernate中java类的成员变量类型如何映射到SQL中的数据类型变化
  10. NHibernate初探(一)简单且完整的示例
  11. 概要设计文档编写规范
  12. java高校图书馆管理网站计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  13. (DES)Single-Shot Object Detection with Enriched Semantics
  14. 标自然段的序号格式_word怎么自然段编号-word段落添加编号-word怎么分段编号
  15. 人们愿意购买亲手摸过的商品
  16. RTX3070+windows11cuda配置教程
  17. 宜人贷蜂巢ELK Stack之elasticsearch权限探索
  18. 解除电信磊科NW1300AC路由器地址限制-----作为二级路由(教程)
  19. 前端密钥怎么存储,才最安全?
  20. 人工智能AI技术如何在视频领域应用落地

热门文章

  1. 中国计算机协会测试,第十届中国计算机学会青年精英大会分论坛预告:软件编程能力认证...
  2. 【办公采购系统】系统中遇到的问题(二)——GridView
  3. 基于Java开发的CMS内容管理系统
  4. Linux面板体验与推荐
  5. LeetCode168 简单题 Java题解
  6. OPenGL中的VBO、VAO、EBO作用理解
  7. 如何分析Activity被relaunch原因
  8. 微信小程序开发:使用reLaunch跳转时报错的解决步骤
  9. 为建筑、土木工程、交通运输、工厂设计、各式的生产
  10. 高绩效团队的打造路径