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

選択した結果をOracleで転置する

    呼び出しごとにクエリを生成する場合、またはハードコードされたmax-column-countを使用する場合は、次のようにすることができます。

    WITH tab AS
    (
      SELECT table_name, column_name FROM user_tab_cols WHERE column_id <= 4
    ) -- user_tab_cols used to provide test data, use your table instead
    SELECT MAX(c1) c1,
           MAX(c2) c2,
           MAX(c3) c3,
           MAX(c4) c4
      FROM (SELECT table_name,
                   DECODE( column_id, 1, column_name ) c1,
                   DECODE( column_id, 2, column_name ) c2,
                   DECODE( column_id, 3, column_name ) c3,
                   DECODE( column_id, 4, column_name ) c4
              FROM ( SELECT table_name,
                            column_name,
                            ROW_NUMBER() OVER ( PARTITION BY table_name ORDER BY column_name ) column_id
                       FROM tab
                   )
           )
     GROUP BY table_name
     ORDER BY table_name
    

    その形で入手するのに十分な場合

    TABLENAME1|COL1,COL2
    TABLENAME2|COL1,COL2,COL3
    

    トム・カイトのストラッグを見てください。



    1. ネストされたケースを簡略化するwhenステートメント

    2. SQLカーソルの操作

    3. UDFがサブクエリよりもはるかに遅いのはなぜですか?

    4. HAProxyとKeepalivedを使用したPostgreSQLの負荷分散