sql >> Database >  >> RDS >> PostgreSQL

Voeg meerdere rijen samen tot één met meer dan één rijwaarde in een kolom

Vanuit uw huidige staat kunt u eenvoudig de spil maken met behulp van de FILTER clausule:

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

Ik weet niet precies hoe je originele tafel eruitziet. Als het meer zo is:

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

Vervolgens kunt u de zoekopdracht als volgt wijzigen:

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

Bewerken :TO heeft de JSON-waarde toegevoegd aan de productkolom:

demo:db<>fiddle

Variant 1:Je zou gewoon het type json . kunnen casten typ text :

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

Variant 2:U leest de waarde van de "name" kenmerk:

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



  1. Lat/lon-tekstkolommen verplaatsen naar een kolom van het 'punt'-type

  2. TableView-bewerkingskolom JAVA FX

  3. CSV importeren met komma's in tekenreekswaarden

  4. Maximale grootte van een varchar(max) variabele