回答

收藏

将行折叠成一列

技术问答 技术问答 259 人阅读 | 0 人回复 | 2023-09-14

我有以下布局的表:6 M8 @/ V' o% Y  \( o1 E; K
    ID   Label   Value --   -----   ----- 1    Lab1    Value1-1 1    Lab2    Value1-2 1    Lab3    Value1-3 1    Lab4    Value1-4 1    Lab5    Value1-5 1    Lab6    Value1-6 2    Lab1    Value2-1 2    Lab2    Value2-2 2    Lab3    Value2-3 2    Lab4    Value2-4 2    Lab5    Value2-5 2    Lab6    Value2-6 ...我想将表转换为以下布局:
2 ?$ h6 j6 a. u5 A    ID   Lab     Lab2        Lab3        Lab4        Lab5        Lab6 1    Value1-1  Value1-2   Value1-3   Value1-4   Value1-5   Value1-6 2    Value2-1  Value2-2   Value2-3   Value2-4   Value2-5   Value2-6 ...我在PostgreSQL中使用SQL。有没有一个简单的方法(内存效率高)来做到这一点?我读过一些关于使用透视的帖子,但我不确定它是否可行,我看到的描述似乎是针对的Oracle的。
) ~# w, Y2 b. d: Q5 f# B                                                               
: M6 C. }5 b! v$ j) C( o9 ~# S2 E    解决方案:                                                               
6 v7 }5 c. y9 h  p2 {6 n                                                                如未安装,请先安装扩展tablefunc。每个数据库需要做一次。8 b0 o; m! T! g( z
CREATE EXTENSION tablefunc;你需要的PostgreSQL 9.1    的CREATE EXTENSION。在旧版本中,您必须使用以下命令从外壳操作安装脚本:8 T5 r5 s. Y+ [0 O% s& y
psql -d dbname -f SHAREDIR/contrib/tablefunc.sql精美的手册提供了相关的Postgres
) F0 N7 C+ D3 K  w9.0的更多信息。" a$ d5 ^; k! [2 G: b; r) ^1 O
然后,您可以使用此类查询:
" {8 o0 Y# o2 xSELECT *FROM   crosstab SELECT id  label  value     FROM   t     ORDER  BY  SELECT DISTINCT label     FROM   t     ORDER  BY 1')AS tbl ( id   int,lab1 text,lab2 text,lab3 text,lab4 text,lab5 text,lab6 text);
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则