sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL rad till kolumner

Först och främst, crosstab() familj av funktioner är inte installerad i standard PostgreSQL. Du måste installera tillägget tablefunc för detta. I PostgreSQL 9.1 skulle du helt enkelt:

CREATE EXTENSION tablefunc;

För äldre versioner, ta en titt på detta relaterade svar.

Fråga

Frågan kan se ut så här:

SELECT *
FROM   crosstab (
        'SELECT l.id
               ,c.column_name
               ,c.data
         FROM   custom_columns_table c
         JOIN   list_table l ON l.id = c.list_id
         ORDER  BY 1',

        'SELECT DISTINCT column_name
         FROM   custom_columns_table
         ORDER  BY 1')
AS tbl (
    id integer
   ,email text
   ,name text
   );

Jag använder formen crosstab() med två parametrar, eftersom det tillåter saknade attribut. Som när en person inte har någon e-post. Då returnerar detta formulär NULL för email kolumn. Detaljerad förklaring:

  • PostgreSQL Crosstab Query

Funktion

Eller skapa en funktion så att du inte behöver ange en kolumndefinitionslista för varje anrop:

CREATE OR REPLACE FUNCTION f_mycross(text, text)
  RETURNS TABLE (
    id integer
   ,email text
   ,name text)
  AS '$libdir/tablefunc','crosstab_hash' LANGUAGE C STABLE STRICT;

Ring:

SELECT * FROM f_mycross(
       'SELECT l.id
              ,c.column_name
              ,c.data
        FROM   custom_columns_table c
        JOIN   list_table l ON l.id = c.list_id
        ORDER  BY 1',
    
       'SELECT DISTINCT column_name
        FROM   custom_columns_table
        ORDER  BY 1')



  1. Hur man får värden som inte innehåller siffror i MariaDB

  2. PostgreSQL rad till kolumner

  3. SQLite JSON_GROUP_OBJECT()

  4. Postgresql Välj rader där kolumn =array