DB2将列转换为行

时间:2017-02-14 01:35:58

标签: db2 db2-luw spring-mybatis

我参考How to convert columns to rows and rows to columns提供的研究资料提出这个问题。我在UNPIVOTING部分解释了类似的查询。这是我的设置。 表定义

CREATE TABLE MYTABLE (
    ID INTEGER, 
    CODE_1 VARCHAR, 
    CODE_2 VARCHAR, 
    CODE_3 VARCHAR, 
    CODE_1_DT DATE, 
    CODE_2_DT DATE, 
    CODE_3_DT DATE, 
    WHO COLUMNS
    ); 

表数据

ID | CODE_1 | CODE_2 | CODE_3 | CODE_1_DT | CODE_2_DT | CODE_3_DT | UPDATED_BY 
1  | CD1    | CD2    | CD3    | 20100101  | 20160101  | 20170101  | USER1
2  | CD1    | CD2    | CD3    | 20100101  | 20160101  | 20170101  | USER2
3  | CD1    | CD2    | CD3    | 20100101  | 20160101  | 20170101  | USER3

我的SQL将列转换为行

SELECT Q.CODE, Q.CODE_DT FROM MYTABLE AS MT,
TABLE VALUES(
            (MT.CODE_1, MT.CODE_1_DT),
            (MT.CODE_2, MT.CODE_2_DT),
            (MT.CODE_3, MT.CODE_3_DT),
            ) AS Q(CODE, CODE_DT)
            WHERE MT.ID=1;

预期输出

CODE | CODE_DT
CD1  | 20100101
CD2  | 20160101
CD3  | 20170101

我无法获得预期结果并收到与基数或基数乘数相关的错误。我不知道出了什么问题或平方是正确的......任何指针?

1 个答案:

答案 0 :(得分:0)

试试这个

select id1, code, date
  from mytable t,
       lateral (values (t.id, t.code_1, t.code_1_dt),
                       (t.id, t.code_2, t.code_2_dt),
                       (t.id, t.code_3, t.code_3_dt)
                ) as q (id1, code, date)