PostgreSQL 行转列实现
说明:需求背景如下,现在有这样的一个结果集,要对结果集中的数据进行行转列显示。
查询的结果集如下所示:
"scf01" "pej01" "pfo01" "pfo10"
827910843726446592 827910844204597248 109 1.00
827910843726446592 827910844204597248 110 1.00
827910843726446592 827910844204597248 111 11.00
827910843726446592 827910844204597248 112 1.00
现在想要如下的显示效果:
"scf01" "pej01" "rightair" "init_val" "is_deaf" "cover"
827910843726446592 827910844204597248 1.00 1.00 11.00 1.00
PostgreSQL 非常强大的功能在于它实现了很多内置的方法来实现某种功能。
下面我们利用 PostgreSQL 的 crosstab 来实现此目标。
SELECT *
FROM crosstab(
'SELECT scf01,pej01,pfo01,pfo10
FROM pfo1
WHERE scf01 = 827910843726446592
ORDER BY 1,2,3,4',
'SELECT DISTINCT pfo01 FROM pfo1 WHERE scf01 = 827910843726446592 ORDER BY 1'
) AS ct(scf01 bigint,pej01 bigint, "rightair_500hz" numeric, "init_val" numeric,"is_deaf" numeric,"cover" numeric);