Sql 带有附加列的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 |

我需要在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 

         |          |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)'
字符串文字需要引号(我现在使用美元引号表示外部引号):

或:

小提琴

见:

关于
交叉表()

。。。带额外列:

并考虑健全的列名。(假设给定的名称只是象征性的。)


分享实际价值和预期回报!不幸的是,使用此代码:从交叉表中选择*(“选择”动物“、”名称“、”动物“、”年龄“、”动物“、”种族“、”动物“.值从”动物“按1'、”值(V0)、(V1)、(V2)、(V3)、(V4)”顺序排列)作为ct(“名称”文本、“年龄”文本、“V0”双精度、“V1”双精度、“V2”双精度、“V3”双精度、“V4”双精度); 正在给我以下错误:错误:列“v0”没有exist@stefano542:字符串文字周围缺少引号。我补充了一些解释。