2017-02-14 89 views
0

我在參考How to convert columns to rows and rows to columns處的研究材料提出這個問題。我在UNPIVOTING部分中解釋了類似的查詢。這是我的設置。 表定義DB2 unpivot將列傳遞到行

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 

我沒能得到預期的結果並獲得與基數或基數乘數有關的錯誤。我不知道發生了什麼問題或sq。是正確的...任何指針?

+0

您正在使用什麼版本的DB2?什麼是實際的錯誤信息? –

+0

** DB2版本爲11 010 ** SQL錯誤[42601]:DB2 SQL錯誤:SQLCODE:-104,SQLSTATE:42601,SQLERRMC:,; CARDINALITY OVER) com.ibm.db2.jcc.c.SqlException: DB2 SQL錯誤:SQLCODE:-104,SQLSTATE:42601,SQLERRMC:,; CARDINALITY OVER) – Vinay

回答

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) 
+0

我更改了sql,但最終出錯 SQL錯誤[42601]:DB2 SQL錯誤:SQLCODE:-104,SQLSTATE:42601,SQLERRMC :(;。 JOIN INNER LEFT RIGHT FULL CROSS,HAVING GROUP com.ibm.db2.jcc.c.SqlException:DB2 SQL error:SQLCODE:-104,SQLSTATE:42601,SQLERRMC:(;。 JOIN INNER LEFT RIGHT FULL CROSS,HAVING GROUP – Vinay

+0

它已在DB2 LUW 11.1中進行測試和工作 - 您在使用哪些DB2? – MichaelTiefenbacher

+0

我有DB2 Z/OS版本11 010.我認爲它不適用於DB2 Z/OS。已經在DB2 LUW上進行了測試並且工作正常。謝謝你的幫助。有沒有在DB2 Z/OS中實現類似的方法? 注 - SQL在DB2 LUW中使用LATERAL或TABLE。 – Vinay