2016-09-29 14 views
0

をクエリ結果を追加します。私はこの(私のクエリの結果を)持って列にSQL

id | suk | xpto 
    ----+------+------ 
    4 | 1023 | abc 
    4 | 1025 | def 
    4 | 1200 | zzz 
    4 | 1501 | ppp 
    5 | 1111 | ola 
    5 | 2222 | xau 

を私は実際に

id | suk | suk2 | suk3 | suk4 
    -----+----------+----------+----------+----------- 
    4 | 1023 abc | 1025 def | 1200 zzz | 1501 ppp 
    5 | 1111 ola | 2222 xau |   | 

に変換する必要がある、私のクエリは次のとおりです。

SELECT b.ID, s.SKU, s.EVENT_TYPE 
FROM VFIE_BONUS_POINTS_RULE b 
INNER JOIN VFIE_BONUS_POINTS_RULE_SKU s 
ON b.ID = s.ID_BNS_PTS_RL; 

私はOracleを使用します。

それは可能ですか?

+0

どのDBMSを使用していますか? –

+0

現在持っているクエリを追加できますか? –

+0

私はVFIE_BONUS_POINTS_RULEのB からのOracle – Ricardo

答えて

0

pivotおよびrow_number()を使用してください。

select * 
    from (select row_number() over (partition by id order by suk) rn, t.* from t) 
    pivot (max(suk||' '||xpto) suk for rn in (1, 2, 3, 4)) 

テスト:

with t(id, suk, xpto) as (select 4, 1023, 'abc' from dual 
       union all select 4, 1025, 'def' from dual 
       union all select 4, 1200, 'zzz' from dual 
       union all select 4, 1501, 'ppp' from dual 
       union all select 5, 1111, 'ola' from dual 
       union all select 5, 2222, 'xau' from dual) 
select * 
    from (select row_number() over (partition by id order by suk) rn, t.* from t) 
    pivot (max(suk||' '||xpto) suk for rn in (1, 2, 3, 4)) 

出力:

ID 1_SUK  2_SUK  3_SUK  4_SUK 
-- -------- -------- -------- -------- 
4 1023 abc 1025 def 1200 zzz 1501 ppp 
5 1111 ola 2222 xau 

編集:

代わりに tのクエリを置きます

skuとxptoの列名を変更するにはどうすればよいですか?予想:SUK 1 - XPTO 1

select id,"1_S" as "SUK 1", "1_X" as "XPTO 1", 
      "2_S" as "SUK 2", "2_X" as "XPTO 2", 
      "3_S" as "SUK 3", "3_X" as "XPTO 3", 
      "4_S" as "SUK 4", "4_X" as "XPTO 4" 
    from (select row_number() over (partition by id order by suk) rn, t.* from t) 
    pivot (max(suk) s, max(xpto) x for rn in (1, 2, 3, 4)) 

オラクルdocumentationpivotに関する詳細情報。

+0

ありがとうございます。 私は私のケースに適応することができます。 – Ricardo

+0

skuとxptoをどのように分けることができますか? – Ricardo

+0

ピボット句を次のように変更します。 'pivot(max(suk)suk、max(xpto)xpto for rn(1,2,3,4))' –

0

新しい列名はどのように変更できますか?今、私は1_Suk、2_Suk、3_Sukを持っています。私はこれが必要です:Suk 1、Suk 2、Suk 3

関連する問題