【问题标题】:Creating dynamic columns from table data从表数据创建动态列
【发布时间】:2018-10-04 19:58:14
【问题描述】:

表格数据样本:

--------------------------
| key | domain | value   |
--------------------------
| a   | en     | English |
| a   | de     | Germany |

返回我需要的结果的查询:

select * from 
(
    select t1.key,
        (select value from TABLE where t1.key=key AND code='en') en,
        (select value from TABLE where t1.key=key AND code='de') de
    from TABLE t1
) as t2

查询返回的数据:

---------------------------
| key | en      | de      |
---------------------------
| a   | English | Germany |

我不想列出所有可用的域:

(select value from TABLE where t1.key=key AND code='*') *

是否可以在 Postgres 中使这个查询更加动态:自动添加表中存在的所有域列?

【问题讨论】:

  • 所以你想要所有不同的非空域值作为列名?您可能必须在 plpgsql 中使用动态 sql 并使用 EXECUTE 执行它。
  • 动态列数?正如@eurotrash 所说,普通 SQL 无法做到这一点,但 pl/pgSQL 可以。

标签: sql postgresql dynamic-sql crosstab


【解决方案1】:

对于多个域,请使用crosstab() 以使查询更短、更快。

完全动态查询,不可能根据表中的数据返回动态列数,因为 SQL 是严格类型化的。无论您尝试什么,最终都需要两个步骤。第 1 步:生成查询,第 2 步:执行它。

或者您返回更灵活的东西而不是表格列,例如数组或json 之类的文档类型。详情:

【讨论】:

    猜你喜欢
    • 2018-04-14
    • 2019-02-23
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    • 2017-12-26
    • 1970-01-01
    • 2019-06-26
    相关资源
    最近更新 更多