1、列转行:
创建一个如下的表
drop table dwtmp.tmp_xn_lsb;
create table dwtmp.tmp_xn_lsb
(
year      int
,quarter   int
,results    int
)distribute by hash(year)in tbs_dwd;

insert into dwtmp.tmp_xn_lsb
values (2004,1,20)
union all values (2004,2,30)
union all values (2004,3,15)
union all values (2004,4,10)
union all values (2005,1,18)
union all values (2005,2,40)
union all values (2005,3,12)
union all values (2005,4,27)


要得到如下结果:

那么方法如下:
select 
      year
      ,max(case when quarter = 1 then results end) as q1
      ,max(case when quarter = 2 then results end) as q2
      ,max(case when quarter = 3 hen results end) as q3
      ,max(case when quarter = 4 then results end) as q4
from dwtmp.tmp_xn_lsb
group by year
      
2、行转列:
创建如下表:

想要得到结果:

那么解决方法有两种:
1:
select s.year, q.quarter,q.results
from dwtmp.tmp_xn_lsb1 as s,
     table (values(1, s.q1),
                      (2, s.q2),
                      (3, s.q3),
                      (4, s.q4))
      as q(quarter, results);
核心是用table函数创建了一个表,这个表是用value实现的多行表,value实现虚表

2:
select year, '1' as quarter , q1 as results  from  dwtmp.tmp_xn_lsb1 union all
select year, '2' as quarter , q2 as results  from  dwtmp.tmp_xn_lsb1 union all
select year, '3' as quarter , q3 as results  from  dwtmp.tmp_xn_lsb1 union all
select year, '4' as quarter , q4 as results  from  dwtmp.tmp_xn_lsb1
order by  year,quarter

注:在这个例子中,一个year对应多个quarter,因此横表转纵表时只能利用以上两种方法,但是,当一个year只对应一个quarter时,那么可以用一个case when 语句实现横转纵

例如:
创建一个表如下:



想得到结果如下:


此时,一个year只归属一个quarter那么,还可用case when 的方法来转置:
select
        year     
      ,case when q1  is not null then 1
              when q2  is not null then 2
              when q3  is not null then 3
              when q4  is not null then 4 end as quarter
     ,case when q1  is not null then q1
             when q2  is not null then q2
             when q3  is not null then q3
             when q4  is not null then q4 end as results
from
     dwtmp.tmp_xn_lsb3
order by year   

DB2中横表纵表互换的更多相关文章

  1. DB2如何将数据库表解锁

    死锁是应用程序争抢资源造成de,把相关应用程序结束掉就可以解除死锁了 先用list application for database yourdatabasename show detail 来看看应 ...

  2. DB2导出表结构、表数据小结

    一.DB2命令行导出数据库全库表结构 ① Win+R进入到DB2安装目录的BIN目录下,执行命令:DB2CMD,进入到DB2 CLP窗口. 命令:DB2CMD ② 创建一个data文件夹 命令:MKD ...

  3. MySQL复制表结构表数据

    MySQL复制表结构 表数据 1.复制表结构及数据到新表CREATE TABLE 新表 SELECT * FROM 旧表这种方法会将oldtable中所有的内容都拷贝过来,当然我们可以用delete ...

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

    MSSQLServer 纵向表转横向表  横向表转纵向表 建表语句及插入数据语句: CREATE TABLE Test_y( ) NULL, ) NULL, [Grade] [int] NULL ) ...

  5. EXP/IMP迁移案例,IMP遭遇导入表的表空间归属问题

    生产环境: 源数据库:Windows Server + Oracle 11.2.0.1 目标数据库:SunOS + Oracle 11.2.0.3 1.确认迁移需求:源数据库cssf 用户所有表和数据 ...

  6. SQL Server 2008 R2——TRUNCATE TABLE 无法截断表 该表正由 FOREIGN KEY 约束引用

    =================================版权声明================================= 版权声明:原创文章 禁止转载  请通过右侧公告中的“联系邮 ...

  7. SQL表关联赋值、系统表、表数据删除

    1. 表与表的关联赋值(用于表与表之间有关联字段,数据互传) 双表关联赋值 UPDATE #B SET #B.D=#A.B from #B inner join #A on #B.C=#A.A 多表关 ...

  8. mysql分表和表分区详解

    为什么要分表和分区? 日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表.这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能 ...

  9. ORACLE修改用户表所属表空间的步骤

    ORACLE修改用户表所属表空间的步骤 使用脚本进行修改.据目前所了解,正长情况下需要修改表的空间和表的索引的空间,如果涉及到BOLB字段的表,修改的方式又不一样了!正常情况下的修改脚本:1.修改表的 ...

  10. MySQL 如何只导出 指定的表 的表结构和数据 ( 转 )

    MySQL 如何只导出 指定的表 的表结构和数据 ( 转 ) 2011-01-04 15:03:33 分类: MySQL MySQL 如何只导出 指定的表 的表结构和数据 导出更个库的表结构如下:my ...

随机推荐

  1. html5--5-1 了解canvas元素

    html5--5-1 了解canvas元素 学习要点 如何在HTML5文档中添加canvas元素 canvas的属性 了解canvas坐标系 了解script元素 绘制一条直线(准确的说是线段) 什么 ...

  2. 随应潮流-基于ABP+Angularjs现代化应用软件开发框架(1)-总体介绍

    系列文章目录 随应潮流-基于ABP+Angulsrjs现代化应用软件开发框架(1)-总体说明 随应潮流-基于ABP+Angulsrjs现代化应用软件开发框架(2)-abp说明 随应潮流-基于ABP+A ...

  3. linux下mycat读写分离的配置

    为什么要配置读写分离,我想我就不需要再赘述了,那么在mycat下如何进行读写分离的配置,配置之后的实际效率又如何呢?我上午根据文档捣鼓和测试了一下,这里做一下记录: 最开始,我们还是要配置mysql本 ...

  4. SPOJ Find the max XOR value(二进制,贪心即可)

    You have two integers L and R, and you are required to find the max xor value of a and b where L < ...

  5. C++ 两款静态检查工具

    pclint(收费) http://www.gimpel.com/html/pcl.htmpc-lint是资格最老,最强力的代码检查工具,但是是收费软件,并且配置起来有一点点麻烦. ccpchecke ...

  6. lsyncd实时同步搭建指南——取代rsync+inotify

    1. 几大实时同步工具比较 1.1 inotify + rsync 最近一直在寻求生产服务服务器上的同步替代方案,原先使用的是inotify + rsync,但随着文件数量的增大到100W+,目录下的 ...

  7. c语言里如何调用汇编里的变量?

    c语言里如何调用汇编里的变量? 汇编语言:是声明全局变量 .globl _end_ofs _end_ofs: .word _end - _start c语言:声明这个变量,然后再调用这个变量 void ...

  8. 关于layer.open() 弹框的使用

    在用 layer.open() 追加渲染HTML的时候,完全看不到效果,皆因layui框架需要在最后用 form.render() 方法来渲染表单才可以看到效果,写法如下: <script> ...

  9. Flutter实战视频-移动电商-02.Flutter实战建立项目和编写入口文件

    02.Flutter实战建立项目和编写入口文件 创建项目: flutter create flutter_shop 创建完成之后呢,它会提示我们, 进入flutter_shop的目录,然后执行flut ...

  10. Flex AIR操作文件系统

    1.各种文件操作http://blog.csdn.net/zdingxin/article/details/6635376 2.file.browseForDirectory("请选择一个目 ...