PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

tabela przestawna z 2 (lub więcej) nazwami wierszy

Użyj crosstab() z dodatkowego modułu tablefunc.

konkretna trudność tutaj jest to, że "nazwa wiersza" składa się z dwóch kolumn. Łączę na potrzeby zapytania i nie wyświetlam połączonej kolumny na końcu.
Zakładając fn i lnNOT NULL . Nieprzetestowane:

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);

Inną opcją byłoby dodanie zastępczej „nazwy wiersza” z funkcją okna, taką jak dense_rank() i traktuj definiujące dwie kolumny jako "kolumny dodatkowe". Przykład:

  • Zapytanie krzyżowe Postgresql z wieloma kolumnami „nazwa wiersza”

Podstawy:

  • Kwerendy PostgreSQL Crosstab


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak ukryć komunikaty INFO podczas uruchamiania skryptów psql?

  2. Zwróć wiersze SETOF z funkcji PostgreSQL

  3. NULL kontra `nieskończoność` w typach zakresów PostgreSQL

  4. Postgres Left Dołącz do warunku gdzie

  5. django.db.utils.ProgrammingError:relacja app_user nie istnieje podczas testu manage.py