从表数据创建动态列

时间:2018-04-24 14:01:36

标签: sql postgresql dynamic-sql crosstab

表数据样本:

--------------------------
| 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中使此查询更具动态性:自动添加表中存在的所有域列?

1 个答案:

答案 0 :(得分:0)

对于多个域,使用crosstab()可以缩短查询速度。

完全动态查询,无法根据表中的数据返回动态数量的列,因为SQL是严格键入的。无论你尝试什么,你最终都需要两个步骤。第1步:生成查询,第2步:执行它。

或者您返回的内容更灵活,而不是表格列,如数组或文档类型,如json。详细说明: