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

1つの列に複数の行値がある複数の行を1つにマージします

    現在の状態から、FILTERを使用してピボットを実行できます。 条項:

    demo:db <> fiddle

    SELECT
        response,
        document,
        MAX(bill) FILTER (WHERE label = 'bill') as bill,
        MAX(answer) FILTER (WHERE label = 'amount') as amount,
        MAX(product) FILTER (WHERE label = 'product') as product,
        MAX(answer) FILTER (WHERE label = 'price') as price
    FROM t
    GROUP BY response, document
    

    元のテーブルがどのように見えるかはよくわかりません。このような場合:

    response | document | label   | value
    -------: | -------: | :------ | :----
    71788176 | 79907201 | bill    | 26899
    71788176 | 79907201 | amount  | 1    
    71788176 | 79907201 | product | shoes
    71788176 | 79907201 | price   | 25.99
    

    次に、次のようにクエリを変更できます。

    demo:db <> fiddle

    SELECT
        response,
        document,
        MAX(value) FILTER (WHERE label = 'bill') as bill,
        MAX(value) FILTER (WHERE label = 'amount') as amount,
        MAX(value) FILTER (WHERE label = 'product') as product,
        MAX(value) FILTER (WHERE label = 'price') as price
    FROM t
    GROUP BY response, document
    

    編集 :JSON値を製品列に追加するには:

    demo:db <> fiddle

    バリエーション1:タイプjsonを単純にキャストできます タイプtext

    MAX(product::text) FILTER (WHERE label = 'product') as product,
    

    バリエーション2:"name"から値を読み取ります 属性:

    MAX(product ->> 'name') FILTER (WHERE label = 'product') as product,
    



    1. 日常生活でデータベースをどのように使用するか

    2. データベースへの接続エラー:(クラスorg.gjt.mm.mysql.Driverを使用)ステートメント(1)に開いているカーソルがありません

    3. MYSQLのWHERECLAUSEのケース

    4. SQLServerのパフォーマンスを容易にする