sql >> データベース >  >> RDS >> Oracle

19列を5列に減らします

    シンプルな PIVOT 機能。

    唯一の違いは、pivotしたくないということです。 列の 、ただしキーワードの順序で可能 。

    ここでは、アルファベット順を中心にピボットするクエリを示します。 キーワードの。

    最初の2つのサブクエリは簡略化されたデータのみを生成することに注意してください 次のように:

    CODPRO  CODRCA
    ------- ------
    400JE   LOGIST
    400JE   INDLEG
    50EFJ10 TP    
    50EFJ10 ESPVER
    50EFJ10 AGRICU
    50EFJ10 INDLEG
    50EFJ10 LOGIST
    

    クエリは、最初にCODRCAの順序を使用して行番号を計算します およびpivot その上で:

    with PRO as (
    select '400JE' CODPRO from dual union all
    select '50EFJ10' CODPRO from dual),
    RCA as (
    select '400JE' CODPRO, 'LOGIST' CODRCA from dual union all
    select '400JE' CODPRO, 'INDLEG' CODRCA from dual union all
    select '50EFJ10' CODPRO, 'TP' CODRCA from dual union all
    select '50EFJ10' CODPRO, 'ESPVER' CODRCA from dual union all
    select '50EFJ10' CODPRO, 'AGRICU' CODRCA from dual union all
    select '50EFJ10' CODPRO, 'INDLEG' CODRCA from dual union all
    select '50EFJ10' CODPRO, 'LOGIST' CODRCA from dual),
    rn as (
    select PRO.CODPRO,RCA.CODRCA,
    row_number() over (partition by PRO.CODPRO order by RCA.CODRCA) as rn
    from PRO
    join RCA on PRO.CODPRO = RCA.CODPRO)
    select *
    from rn
    pivot (max(CODRCA)  CODRCA for (rn) in
    (1 as "C1",
     2 as "C2",
     3 as "C3",
     4 as "C4",
     5 as "C5"))
    

    結果

    CODPRO  C1_COD C2_COD C3_COD C4_COD C5_COD
    ------- ------ ------ ------ ------ ------
    400JE   INDLEG LOGIST                     
    50EFJ10 AGRICU ESPVER INDLEG LOGIST TP
    

    他のソート論理をご希望の場合 必要に応じて適応します。別の列名が必要な場合も適応します。



    1. GROUPBYのわずかなバリエーションを探しています

    2. T-SQLで2つの日付の間に分間隔を生成するにはどうすればよいですか?

    3. GrailsでのPostgresqlの使用:シーケンスまたはテーブルがありません:hibernate_sequence

    4. 結果セットではなく、1つのテーブルの行に制限があるSQLクエリ