PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Обединете няколко реда в един с повече от една стойност на ред в колона

От текущото си състояние можете просто да направите осевата точка с помощта на 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

Редактиране :TO добави 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо null||null връща нулева стойност, но concat(null,null) връща празен низ в postgres?

  2. Странна грешка при подреждане (бъг ли е?) при подреждане на две колони с еднакви стойности

  3. Как да имате персонализиран ред на сортиране за обединена заявка в Postgres

  4. Как да напиша комбинаторна функция в postgres?

  5. Изпълнете динамична кръстосана заявка