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

кръстосана таблица с 2 (или повече) имена на редове

Използвайте crosstab() от допълнителния модул tablefunc.

Специфичната трудност ето, че "име на ред" се състои от две колони. Конкатенирам за целите на заявката и не показвам свързаната колона в края.
Приемаме fn и ln са NOT NULL . Нетествано:

SELECT fn, ln, cat1, cat2
FROM crosstab(
       'SELECT fn || ln AS row_name, fn, ln, file_type, attribute
        FROM   t
        ORDER  BY fn, ln, file_type'

      ,$$VALUES ('cat1'::text), ('cat2')$$)
AS t (row_name text, fn text, ln int, cat1 text, cat2 text);

Друг вариант би бил да добавите сурогатно "име на ред" с функция на прозорец като dense_rank() и третирайте дефиниращите две колони като "допълнителни колони". Пример:

  • Postgresql кръстосана заявка с множество колони „име на ред“

Основи:

  • PostgreSQL Crosstab Query


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да използвам повторно резултат за клаузите SELECT, WHERE и ORDER BY?

  2. Управление на висока наличност в PostgreSQL – Част II:Мениджър на репликация

  3. Rails недефиниран метод за ActiveRecord_Associations_CollectionProxy

  4. Преобразувайте името на месеца в номер на месеца в PostgreSQL

  5. Компресиране на текст в PostgreSQL