Home >Database >Mysql Tutorial >Oracle纵向表转换为横向表写法

Oracle纵向表转换为横向表写法

WBOY
WBOYOriginal
2016-06-07 17:28:471296browse

Oracle纵向表转换为横向表写法 假设存在如下纵向表,第一列为id(可能是某个业务数据的id),第二列为类型,第三列为类型对应的值

Oracle纵向表转换为横向表写法

假设存在如下纵向表,第一列为id(可能是某个业务数据的id),第二列为类型,第三列为类型对应的值,如下图:

如上表,存在2,3,4三种类型,其中业务数据ID为1的三种类型都有值,业务数据ID为2的三种类型都有值,业务数据ID为3的只有类型2和3有值,现在要把纵向表横过来显示,可以采用如下代码:

 -- =========================================================
-- 纵向表变横向表:
-- 1. 转换类型,类型的值必须是整数,且不等于0,即0没有意义,0可以表示为空
 -- =========================================================
SELECT
      t.id,
      SUM(DECODE(t.code, 2, 2, 0)) "第二项", -- 如果该行类型为2则就是2,其它的都为0
      SUM(DECODE(t.code, 3, 3, 0)) "第三项",
      SUM(decode(t.code, 4, 4, 0)) "第四项"
 FROM ttt t WHERE t.id=1 GROUP BY t.id;
 -- =========================================================
-- 纵向表变横向表:
-- 1. 转换类型对应的数据,且数据需要是数值,且0没有意义,,即0可以表示为空
 -- =========================================================
 SELECT
      t.id,
      SUM(DECODE(t.code, 2, t.val, 0)) "第二项", -- 如果该行类型为2则显示2类型对应的值DECODE,否则都显示0
      SUM(DECODE(t.code, 3, t.val, 0)) "第三项",
      SUM(DECODE(t.code, 4, t.val, 0)) "第四项"
 FROM ttt t GROUP BY t.id;

linux

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:Ubuntu 源码安装 MySQL 5.1.62Next article:EXP/IMP迁移数据