sql >> Databáze >  >> RDS >> PostgreSQL

křížová tabulka se 2 (nebo více) názvy řádků

Použijte crosstab() z doplňkového modulu tablefunc.

Konkrétní obtížnost zde je, že "název řádku" se skládá ze dvou sloupců. Pro účely dotazu zřetězím a nezobrazuji zřetězený sloupec na konci.
Za předpokladu fn a ln NOT NULL . Netestováno:

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

Další možností by bylo přidat náhradní "název řádku" s funkcí okna, jako je dense_rank() a zacházet s definujícími dvěma sloupci jako s "nadbytečnými sloupci". Příklad:

  • Křížový dotaz Postgresql s více sloupci „název řádku“

Základy:

  • PostgreSQL Crosstab Query


  1. Jak nainstalovat a zabezpečit MariaDB na Debian 9

  2. Vytváříte obslužnou rutinu protokolování pro připojení k Oracle?

  3. Jaký je rozdíl mezi char, nchar, varchar a nvarchar na serveru SQL?

  4. Jak počítat dny kromě neděle mezi dvěma daty v Postgres?