PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Hợp nhất nhiều hàng thành một hàng có nhiều giá trị hàng trong một cột

Từ trạng thái hiện tại của bạn, bạn chỉ có thể thực hiện việc xoay vòng bằng cách sử dụng FILTER mệnh đề:

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

Tôi không chắc lắm, bảng ban đầu của bạn trông như thế nào. Nếu nó giống như thế này:

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

Sau đó, bạn có thể sửa đổi truy vấn như sau:

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

Chỉnh sửa :TO đã thêm giá trị JSON vào cột sản phẩm:

demo:db <> fiddle

Biến thể 1:Bạn chỉ cần truyền kiểu json thành loại text :

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

Biến thể 2:Bạn đọc giá trị từ "name" thuộc tính:

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. LÀM THẾ NÀO ĐỂ ĐƯA RA LÀ DECIMAL trong postgresql?

  2. Truy vấn không đạt được chỉ mục - đây có phải là các cột thích hợp để lập chỉ mục không?

  3. cách tránh cột trong mệnh đề 'where' nếu tham số là 'NOT PASSED' postgresql

  4. Làm thế nào để tạo một cơ sở dữ liệu với flyway?

  5. Tại sao một số nhận dạng trong TẠO BẢNG được dấu ngoặc kép mà không phải là những số khác?