我得到了一个基于键值的表,其中每个键值对都被分配给一个由id标识的实体:
| id | key | value |
|-----|-----------|-------|
| 123 | FIRSTNAME | John |
| 123 | LASTNAME | Doe |
字符串
我想把它变成这样的结构:
| id | firstName | lastName |
|-----|-----------|----------|
| 123 | John | Doe |
型
我想可以使用postgres内置的crosstab
函数来完成。
你能告诉我如何做,并解释为什么它的工作?
1条答案
按热度按时间uwopmtnx1#
首先激活内置的
tablefunc
-extension:字符串
然后创建表格并添加示例数据:
型
现在让我们准备
crosstab
语句:型
这里有
ORDER BY
很重要。测试结果:
型
解决方案
现在,
crosstab
按照我们的要求创建表:型
测试结果:
型
工作原理#1
然而,为了理解它是如何工作的,我发现最简单的方法就是改变
ORDER BY
,看看会发生什么:型
测试结果:
型
当我们改变键的排序时,
crosstab
函数看到键以另一个方向排序,从而反转生成的列。工作原理#2
另一件帮助我理解它是如何工作的事情:列定义都是关于位置的:
型
结果
型