zoukankan      html  css  js  c++  java
  • [转]DB2行列转换

    行转列
    给出下面的数据:
    CREATE TABLE Sales (Year INT, Quarter INT, Results INT)
    YEAR        QUARTER     RESULTS
    ----------- ----------- -----------
    2004 1 20
    2004 2 30
    2004 3 15
    2004 4 10
    2005 1 18
    2005 2 40
    2005 3 12
    2005 4 27
    想要的到结果:
    YEAR Q1 Q2 Q3 Q4
    ----------- ----------- ----------- ----------- -----------
    2004 20 30 15 10
    2005 18 40 12 27
    这个SQL就可解决这个问题:
    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
    THEN Results END) AS Q3,
    MAX(CASE WHEN Quarter = 4
    THEN Results END) AS Q4
    FROM Sales
    GROUP BY Year
    解释一下为什么要加max的原因,因为不加max的话结果会是这样:
    YEAR Q1 Q2 Q3 Q4
    ----------- ----------- ----------- ----------- -----------
    2004 20 - - -
    2004 - 30 - -
    2004 - - 15 -
    2004 - - - 10
    2005 18 - - -
    2005 - 40 - -
    2005 - - 12 -
    2005 - - - 27
    列转行
    给出下面数据
    CREATE TABLE SalesAgg
    ( year INTEGER,
    q1 INTEGER,
    q2 INTEGER,
    q3 INTEGER,
    q4 INTEGER );

    YEAR Q1 Q2 Q3 Q4
    ----------- ----------- ----------- ----------- -----------
    2004 20 30 15 10
    2005 18 40 12 27

    想要的结果
    YEAR QUARTER RESULTS
    ----------- ----------- -----------
    2004 1 20
    2004 2 30
    2004 3 15
    2004 4 10
    2005 1 18
    2005 2 40
    2005 3 12
    2005 4 27
    这个SQL就可以实现:
    SELECT S.Year, Q.Quarter, Q.Results
    FROM SalesAgg AS S,
    TABLE (VALUES(1, S.q1),
    (2, S.q2),
    (3, S.q3),
    (4, S.q4))
    AS Q(Quarter, Results);

    下面解释一下执行的过程:
    核心是用table函数创建了一个表,这个表是用value实现的多行表,value实现虚表的例子:

    db2 => select * from (values (1,2),(2,3)) as t1(col1,col2)

    COL1 COL2
    ----------- -----------
    1 2
    2 3

    2 条记录已选择。
    db2 => select * from (values 1) as a

    1
    -----------
              1

    1 条记录已选择。

    所不同的是这里跟from子句中的一个表产生了关系,取出了表中的一列作为数据.
  • 相关阅读:
    PHP入门:在Windows中安装PHP工作环境
    Oracle数据库优化的经验总结
    引入js和css文件的总结
    PHP的加密解密字符串函数
    js+html5双人五子棋(源码下载)
    JAVA的网络编程基础概念
    asp.net的code-Behind技术
    10个调试Java的技巧
    Oracle基础 各种语句的定义格式
    CSS行高line-height的理解
  • 原文地址:https://www.cnblogs.com/Fskjb/p/1893923.html
Copyright © 2011-2022 走看看