Sql 带有附加列的Postgres透视表
我需要在Postgres中实现透视表,但我不知道如何实现。要使用的函数应该是Sql 带有附加列的Postgres透视表,sql,postgresql,pivot,crosstab,Sql,Postgresql,Pivot,Crosstab,我需要在Postgres中实现透视表,但我不知道如何实现。要使用的函数应该是交叉表(),但我不知道如何正确使用它 给出这样一张表: column a | column b | column c | value 1 | value 2 0 | 1 | 2 | 3 | 4 | column c | Column b | 0 | 1 | 2 | 3 | 4 |
交叉表()
,但我不知道如何正确使用它
给出这样一张表:
column a | column b | column c | value 1 | value 2
0 |
1 |
2 |
3 |
4 |
column c | Column b | 0 | 1 | 2 | 3 | 4
| |value 1|value 1|value 1|value 1|value 1|
| |
我必须得到这样的东西:
column a | column b | column c | value 1 | value 2
0 |
1 |
2 |
3 |
4 |
column c | Column b | 0 | 1 | 2 | 3 | 4
| |value 1|value 1|value 1|value 1|value 1|
| |
所以我需要得到第0行,4作为列,值1
作为值crosstab()
函数需要3列,我需要列c
和列b
都出现。列c
和列b
是所谓的“额外”列。将它们放在行名称之后和类别之前:
SELECT * FROM crosstab(
'SELECT "column a", "column c", "column b"
,"value 2", "value 1"
FROM tbl
ORDER BY 1'
, 'VALUES (0), (1), (2), (3), (4)'
) AS ct (
"column a" text
, "column c" text
, "column b" text
, "0" int
, "1" int
, "2" int
, "3" int
, "4" int);
回应您的评论:这些是嵌套的数字文字,不需要引用:
, 'VALUES (0), (1), (2), (3), (4)'
字符串文字需要引号(我现在使用美元引号表示外部引号):
或:
小提琴
见:
交叉表()
:
并考虑健全的列名。(假设给定的名称只是象征性的。)