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

Xoay vòng trong Postgresql với các dấu TRUE / FALSE

Tôi đã thử nghiệm một chút và đây là những gì tôi đã nghĩ ra.

# Reading the data into a table

SELECT * INTO crosstab_test FROM 
(VALUES (20180101,'001','Dog','Asthma','Mucus'),
(20180101,'001','Dog','Asthma','Noisy'),
(20180101,'001','Dog','Asthma','Respiratory'),
(20180102,'002','Cat','Osteoarthritis','Locomotor'),
(20180102,'002','Cat','Osteoarthritis','Limp'),
(20180131, '003', 'Bird', 'Avian Pox','Itchy')) as a (date, id, species, illness, tag);

SELECT DISTINCT date, id, species, illness, mucus, noisy, locomotor, respiratory,  limp, itchy 
FROM 
(SELECT "date", id, species, illness
FROM crosstab_test) a
INNER JOIN             
(SELECT * FROM crosstab(
'SELECT id, tag, ''TRUE'' FROM crosstab_test ORDER BY 1,2,3',
'SELECT DISTINCT tag FROM crosstab_test ORDER BY 1')
as tabelle (id text, Itchy text, Limp text, Locomotor text, Mucus text, Noisy text, Respiratory text)) b
USING(id)
ORDER BY 1;


   date   | id  | species |    illness     | mucus | noisy | locomotor | respiratory | limp | itchy
----------+-----+---------+----------------+-------+-------+-----------+-------------+------+-------
 20180101 | 001 | Dog     | Asthma         | TRUE  | TRUE  |           | TRUE        |      |
 20180102 | 002 | Cat     | Osteoarthritis |       |       | TRUE      |             | TRUE |
 20180131 | 003 | Bird    | Avian Pox      |       |       |           |             |      | TRUE
(3 Zeilen)

Nếu bạn không quan tâm đến thứ tự của các cột, bạn có thể thực hiện SELECT DISTINCT * ...

Thay thế NULL s với FALSE có lẽ sẽ hơi khó khăn khi xem xét 350 thẻ mà bạn nói rằng bạn có. Vì vậy, tôi đề nghị để chúng đi. Nếu bạn muốn chúng, bạn có thể thực hiện SELECT DISTINCT date, id, species, illness, COALESCE(mucus, 'FALSE'), COALESCE(noisy, 'FALSE'),...

Tuy nhiên, viên thuốc đắng mà bạn sẽ phải nuốt là chỉ định tất cả 350 thẻ dưới dạng cột với loại text trong as the tabelle (id text, Itchy text, Limp text, Locomotor text, Mucus text, Noisy text, Respiratory text) -phần của câu lệnh bảng chéo. Đảm bảo sắp xếp chúng theo đúng thứ tự như được xác định bởi 'SELECT DISTINCT tag FROM crosstab_test ORDER BY 1' cũng trong câu lệnh bảng chữ cái.

Hy vọng đó là những gì bạn đang tìm kiếm.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DISTINCT với hai array_agg (hoặc một array_agg với bộ dữ liệu bên trong)?

  2. Làm thế nào để chia một hàng thành nhiều hàng với một truy vấn duy nhất?

  3. Không thể tạo tiện ích mở rộng plv8 postgresql

  4. Làm thế nào để chuyển đổi số nguyên thành nối tiếp

  5. Làm thế nào để sử dụng danh sách trắng và các câu lệnh soạn sẵn với Postgresql trong php?