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

PostgreSQL ред към колони

Първо, crosstab() семейството от функции не е инсталирано в стандартния PostgreSQL. Трябва да инсталирате разширението tablefunc за това. В PostgreSQL 9.1 вие просто бихте:

CREATE EXTENSION tablefunc;

За по-стари версии вижте този свързан отговор.

Запитване

Заявката може да изглежда така:

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

Използвам формата на crosstab() с два параметъра, защото това позволява липсващи атрибути. Например, когато човек няма имейл. След това този формуляр ще върне NULL за email колона. Подробно обяснение:

  • PostgreSQL Crosstab Query

Функция

Или създайте функция, така че да не се налага да предоставяте списък с дефиниции на колони за всяко повикване:

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;

Обадете се:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. uWSGI, Flask, sqlalchemy и postgres:SSL грешка:неуспешно декриптиране или лош запис mac

  2. ActiveRecord::AdapterNotSpecified конфигурацията на базата данни не посочва адаптер

  3. Може ли PostgreSQL да индексира колони от масиви?

  4. PostgreSQL индекс на JSON

  5. Използване на криптиране за засилване на сигурността на базата данни на PostgreSQL