2017-10-03 12 views
0

私は私が達成したいことはある「ブック」ピボット複数columsのOracle SQL

ID | lan_id | main_title | part 
--------------------------------- 
1 | 1  | Quick guide | 1 
2 | 1  | Quick guide | 4 
--------------------------------- 

と呼ばれるテーブルがあります。

-------------------------------------------- 
ID   | 1   | 2 
Lan_id  | 1   | 1 
main_tile | Quick guide | Quick guide 
part  | 1   | 4 
-------------------------------------------- 

を私はピボットが必要だと思うが、私はどのように考えていますこれをする。手伝って頂けますか?その後、PIVOT

答えて

0

使用UNPIVOT

SQL Fiddle

Oracleの11グラムR2スキーマのセットアップ:1

CREATE TABLE table_name (ID, lan_id, main_title, part) AS 
SELECT 1, 1, 'Quick guide', 1 FROM DUAL UNION ALL 
SELECT 2, 1, 'Quick guide', 4 FROM DUAL; 

問合せ:

SELECT * 
FROM (SELECT ROWNUM AS rn, 
       TO_CHAR(id) AS id, 
       TO_CHAR(lan_id) AS lan_id, 
       main_title, 
       TO_CHAR(part) AS part 
     FROM table_name) 
UNPIVOT (value FOR key IN (
    id, 
    lan_id, 
    main_title, 
    part 
)) 
PIVOT (MAX(value) FOR rn IN (
    1 AS "1", 
    2 AS "2" 
)) 
ORDER BY key 

Results

|  KEY |   1 |   2 | 
|------------|-------------|-------------| 
|   ID |   1 |   2 | 
|  LAN_ID |   1 |   1 | 
| MAIN_TITLE | Quick guide | Quick guide | 
|  PART |   1 |   4 | 
+0

それはそのように表示されますが、私はあなたの答えをコピーしませんでした... :) –

0

次のようにあなたがUNPIVOTPIVOTの両方を使用することができます。

WITH Books (Id, 
      lan_id, 
      main_title, 
      part) 
    AS (SELECT 1, 1, 'Quick guide', 1 FROM DUAL 
     UNION ALL 
     SELECT 2, 1, 'Quick guide', 4 FROM DUAL) 
SELECT * 
    FROM (SELECT * 
      FROM (SELECT TO_CHAR (id) id, 
         TO_CHAR (lan_id) lan_id, 
         main_title, 
         TO_CHAR (part) part, 
         TO_CHAR (ROWNUM) rn 
        FROM Books) UNPIVOT (columns 
           FOR header 
           IN (Id, lan_id, main_title, part))) PIVOT (MAX (
                      columns) 
                    FOR rn 
                    IN (1 AS row1, 
                     2 AS row2)); 

出力

Header    row1 row2 
-----    ---- ---- 
ID     1 2 
LAN_ID    1 1 
MAIN_TITLE Quick guide Quick guide 
PAIR    1 4