1

Windows Server 2008 R2で実行されているOracle 11gR2を使用しています

このようなテーブルがあります

   year    code    value
   ----    ----    -----
   1991      1      v1
   1991      2      v2
   1991      3      v3

   1992      1     v4
   1992      2     v5
   1992      3     v6

   ...
   2050  

コード列は 1 ~ 10 です。

最終出力を (値が 1 ~ 10 の列) として表示したい

 year    1   2   3  4 ....    10
 ----    --  --  -- --        --
 1991   v1   v2  v3 null.......null
 1992   v4   v5  v6. ...etc

上記の形式で結果を取得するためにピボットを行うにはどうすればよいですか? 前もって感謝します。

4

3 に答える 3

5

使用せずに簡単な方法の1つPIVOTは、次を使用することCASEです。

SELECT  year,
        MIN(CASE WHEN code = 1 THEN value END) AS Col1,
        MIN(CASE WHEN code = 2 THEN value END) AS Col2,
        MIN(CASE WHEN code = 3 THEN value END) AS Col3,
        MIN(CASE WHEN code = 4 THEN value END) AS Col4,
        MIN(CASE WHEN code = 5 THEN value END) AS Col5,
        MIN(CASE WHEN code = 6 THEN value END) AS Col6,
        MIN(CASE WHEN code = 7 THEN value END) AS Col7,
        MIN(CASE WHEN code = 8 THEN value END) AS Col8,
        MIN(CASE WHEN code = 9 THEN value END) AS Col9,
        MIN(CASE WHEN code = 10 THEN value END) AS Col10
FROM YourTable
GROUP BY year

を使用PIVOTすると、次のようになります。

SELECT *
FROM (SELECT year, code, value FROM YourTable) 
PIVOT (MIN(value) FOR code IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) );
于 2013-02-08T16:58:41.813 に答える
3

Oracle 11g has a PIVOT function that can be used to transform the data into columns from rows:

select *
from
(
  select year, code, value
  from yourtable
)
pivot
(
  max(value)
  for code in ('1', '2', '3', '4', '5', '6', '7', '8', '9', '10')
) piv

See SQL Fiddle with Demo

于 2013-02-08T17:01:50.787 に答える
2

11gでは、以下を使用できますpivot

SELECT *
FROM t
PIVOT (max(value) as value FOR (code) IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
于 2013-02-08T17:02:27.450 に答える