sql >> Database teknologi >  >> RDS >> PostgreSQL

Flet flere rækker til én med mere end én rækkeværdi i en kolonne

Fra din nuværende tilstand kan du ganske enkelt foretage pivoten ved hjælp af FILTER klausul:

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

Jeg er ikke helt sikker på, hvordan dit originale bord ser ud. Hvis det er mere sådan her:

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

Derefter kan du ændre forespørgslen sådan her:

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

Rediger :FOR AT tilføje JSON-værdien til produktkolonnen:

demo:db<>fiddle

Variant 1:Du kan simpelthen caste typen json ind i text :

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

Variant 2:Du læser værdien fra "name" attribut:

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



  1. få tælling fra den samme kolonne i en mysql-tabel?

  2. SQLite Sum() vs Total():Hvad er forskellen?

  3. JPA-kort MySQL json-type, fik forvansket streng

  4. Hvordan får man dimensionaliteten af ​​en ARRAY-søjle?