从函数PostgreSQL而不是记录返回多个列和行

时间:2018-03-15 12:46:58

标签: sql postgresql plpgsql postgresql-9.6

我正在网上阅读PostgreSQL上的函数并返回结果 在此链接中:

  1. SQL function return-type: TABLE vs SETOF records
  2. How do I reference named parameters in Postgres sql functions?
  3. http://www.postgresqltutorial.com/plpgsql-function-returns-a-table/
  4. 我写了这个函数:

    create or replace function brand_hierarchy(account_value int)
      RETURNS table (topID INTEGER, accountId INTEGER, liveRowCount bigint,archiveRowCount bigint)
      AS
    $BODY$
      SELECT * FROM my_client_numbers
    where accountId  = coalesce($1,accountId);
    $BODY$
    LANGUAGE sql;
    

    哪个有效,并将结果返回到一列记录类型。 请注意,可能会返回多行。

    现在回复是:

    record
    (1172,1172,1011,0)
    (1172,1412,10,40)
    .....
    

    我希望我的结果不是作为记录而是作为多列

    |---------|---------|------------|----------------|
    | topID   |accountId|liveRowCount|archiveRowCount |
    |---------|---------|------------|----------------|
    | 1172    |1172     | 1011       |  0             |
    | 1172    |1412     | 10         |  40            |
    

    有没有办法从PostgreSQL函数返回多个列

3 个答案:

答案 0 :(得分:6)

返回表(或setof)的函数应该在FROM子句中使用:

select * 
from brand_hierarchy(1234)

答案 1 :(得分:2)

我能够通过此查询按预期看到它:

SELECT * FROM brand_hierarchy (id)

答案 2 :(得分:0)

我发现了此功能crosstab,我认为这就是您要寻找的功能 https://www.postgresql.org/docs/9.3/tablefunc.html