0

私はオラクルピボットが初めてです。これは可能ですか?

2つの列がTypeあり、Value

type     value
---------------
a        a1
b        b1
c        c1
etc

このようなものをすべて1行で取得できますか??

a   b    c 
a1  b1   c1

このようなクエリを試すと、次のような出力が得られます

  select A,B from tbl
  pivot (max(value) for type in ('a' as A,'b' as B))

  ------------------------------------
    A    B
   null  b1
   a1    null

ありがとう

4

2 に答える 2

5

おそらく行を一意に識別する列(たとえば主キー列)を含むselectテーブル(テーブル)に対してステートメントを発行し、演算子がその列の値を考慮に入れるため、そのような出力が得られます。簡単な例を次に示します。tblpivot

/*assume it's your table tbl */
with tbl(unique_col, col1, col2) as(
  select 1, 'a',  'a1' from dual union all
  select 2, 'b',  'b1' from dual union all
  select 3, 'c',  'c1' from dual
)

このようなテーブルに対するクエリは、質問で提供した出力 (望ましくない出力) を提供します。

select A,B 
  from tbl
pivot(
  max(col2) for col1 in ('a' as A,'b' as B)
)

結果:

A    B
--   --
a1   null   
null b1

目的の出力を生成するには、行の一意の値を持つ列を除外する必要があります。

select A
     , B 
  from (select col1 
             , col2  /*selecting only those columns we are interested in*/
           from tbl ) 
  pivot(
    max(col2) for col1 in ('a' as A,'b' as B)
  )

結果:

A  B
-- --
a1 b1 
于 2013-10-09T20:03:22.893 に答える
1

このようなもの:

SELECT a, b, c
  FROM tbl
 PIVOT
 (
   MAX(Value) FOR Type IN ('a' as a, 
                           'b' as b, 
                           'c' as c)
 )

詳細については、このドキュメントを参照してください。

于 2013-10-09T19:21:55.693 に答える