我使用了交叉表函数,结果得到了一个每行只有一个列值的表。
| ID | c1 | c2 | c3 |
-----------------------------
| 1 | | 1 | |
| 1 | 4 | | |
| 1 | | | 12 |
| 15 | 2 | | |
| 15 | | | 3 |
并希望更改它,以便ID是不同的,并且所有值都在同一行上:
| ID | c1 | c2 | c3 |
-----------------------------
| 1 | 4 | 1 | 12 |
| 15 | 2 | | 3 |
最好的办法是什么?我可以使用SUM
和GROUP BY id
这样的聚合函数,但这会导致不必要的计算。
1条答案
按热度按时间kknvjkwl1#
基本上,使用来自附加模块
tablefunc
的crosstab()
:参见(详细说明):
或者使用纯SQL:
可以选择将
WHERE key = ANY('{c1,c2,c3}')
添加到每个查询。适应您实际的、未公开的数据类型和要求。
每个人都有自己的优点和缺点。参见: