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

PostgreSQLのクロス集計/ピボットの問題

    テストケース(サンプルデータを提供するための推奨される方法):

    CREATE TEMP TABLE prefs (pref_id int, pref_name text, pref_value text);
    
    INSERT INTO prefs VALUES 
     (1, 'PagerNumber' , '2125551234')
    ,(2, 'PagerCarrier', '@att.com')
    ,(3, 'PagerCarrier', '@something.com');
    

    クエリ:

    SELECT *
    FROM   crosstab(
           'SELECT pref_id, pref_name, pref_value
            FROM   prefs
            ORDER  BY 1, 2',
    
           $$VALUES ('PagerNumber'::text), ('PagerCarrier')$$
           )
    AS x (section text, pager_number bigint, pager_carrier text);
    

    質問に示された結果を正確に返します。 PagerNumberの場合 有効なbigint以外のものにすることができます 番号、textを使用 代わりに。

    あなたがあなたの質問で言及している答えは時代遅れであり、そもそも決して正しくありませんでした。 適切な回答と説明とリンクを追加しました。



    1. データベースリソースの適切な管理:カーソルと接続

    2. CASE式の汚い秘密

    3. PostgreSQL-エイリアス列とHAVING

    4. VisualStudio2017にOracleAttunityDriversをインストールします