DB2列转行的实现_DB2_数据库_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 数据库 > DB2 > DB2列转行的实现

DB2列转行的实现

 2013/8/9 17:21:04    程序员俱乐部  我要评论(0)
  • 摘要:DB2列转行是我们很常见的操作,下面就为您详细介绍DB2列转行的步骤,如果您对DB2列转行方面感兴趣的话,不妨一看。给出下面数据CREATETABLESalesAgg(yearINTEGER,q1INTEGER,q2INTEGER,q3INTEGER,q4INTEGER);YEARQ1Q2Q3Q4------------------------------------------------------
  • 标签:实现

DB2列转行是我们很常见的操作,下面就为您详细介绍DB2列转行的步骤,如果您对DB2列转行方面感兴趣的话,不妨一看。

给出下面数据

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);
每个values中对应列的数据类型必须相同,值可以任意,如1,2,3,4都是整形下面解释一下执行的过程:核心是用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子句中的一个表产生了关系,取出了表中的一列作为数据.

发表评论
用户名: 匿名