2016-12-16 8 views
2

ピボットを使用して問合せを作成する際に問題が発生しました。 私は、このような出力項目ことができますので、私はピボットを使用しています4列oracle sqlピボットによってデータがグループ化されています

col1 | col2 | col3 | col4 
1 | 1 | 5 | 2 
1 | 2 | 6 | 2 
1 | 3 | 7 | 2 
1 | 4 | 8 | 2 
1 | 1 | 5 | 2 
1 | 2 | 6 | 2 
1 | 3 | 7 | 2 
1 | 4 | 8 | 2 

を持っているテーブルがあります。ここでは

col1 | col2 | col3 

はクエリです:

select col1, "1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24" 
from (
    select col1, col2, col3 
    from tbl 
    where col4 = 2 
) 
pivot 
(
    max(col2) 
    for col3 
    in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24) 
) 

コードの動作を私はデータベースに2つの同一のレコードがあるときはいつもexcepct。グループ化され、1として表示されます。私は2つの別々の同じ行として出力したいと思います。私が見ている最も簡単な修正は、IDとして機能する別の列をテーブルに組み込むことです。しかし、私はこのIDを他のどこでも使用しないので、それはちょっと無意味だと思っていますし、ちょっとだけコードを変更するほうが簡単かもしれません。

1 5 6 7 8 9 

と私はこれが欲しい:

上記のコードは、この出力

1 5 6 7 8 9 
1 5 6 7 8 9 
+0

あなたはそうです。データのサブセットを決定するために追加の列が必要になります。これは、(col1、col2、col3)値の最初の行、(col1、col2、col3)値の2番目の行などにすべての行をグループ化するために使用するrow_number() " – Boneist

+0

1つのDBMS(SQL ServerまたはOracle)またはあなたの質問はいずれかに有効ですか? –

+0

@Boneistはい、これが最善の考えです。 – Kristjan

答えて

0

ROW_NUMBER()解析関数使用して別の列を追加します。

SELECT * 
FROM (SELECT t.*, 
       ROW_NUMBER() OVER (PARTITION BY col1, col2, col3, col4 
            ORDER BY ROWNUM) AS rn 
     FROM tbl t) 
PIVOT (MAX(Col2) FOR Col3 IN (1,2,3,4,5,6,7,8,9,10 /* ..., 24*/)); 

出力を

COL1 COL4 RN 1 2 3 4 5 6 7 8 9 10 
---- ---- -- - - - - - - - - - -- 
    1 2 1   1 2 3 4 
    1 2 2   1 2 3 4 
+0

あなたの答えに感謝します。 IDとして機能する別の列をテーブルに追加して、この問題を解決しました。私の解決策が働いています。とにかくありがとう – Kristjan

関連する問題