sql >> Databáze >  >> RDS >> PostgreSQL

Sloučit více řádků do jednoho s více než jednou hodnotou řádku ve sloupci

Z vašeho aktuálního stavu můžete jednoduše provést pivot pomocí FILTER klauzule:

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

Nejsem si úplně jistý, jak vypadá váš původní stůl. Pokud je to více takto:

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

Poté můžete dotaz upravit takto:

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

Upravit :K přidání hodnoty JSON do sloupce produktu:

demo:db<>fiddle

Varianta 1:Můžete jednoduše přetypovat typ json zadejte text :

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

Varianta 2:Hodnotu čtete z "name" atribut:

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



  1. PrepareStatement nastavení null pro NUMBER_ARRAY nefunguje

  2. dynamický výběr názvu sloupce v MySql

  3. Jak vybrat poslední záznam každé hodiny v den

  4. Jak monitorovat PostgreSQL pomocí Nagios