【问题标题】:PostgreSQL Crosstab Select QueryPostgreSQL 交叉表选择查询
【发布时间】:2018-12-13 02:36:32
【问题描述】:

有人知道如何在 PostgreSQL 中创建交叉表查询吗? 例如我有两个下表:

表A

| ID 1       | ID 2        | ID 3         | 
|:-----------|------------:|:------------:|
| 00001      |        01   |    0001      |
| 00001      |        02   |    0001      |  
| 00001      |        01   |    0002      |

表 B

| ID 1       | ID 2        | ID 3         | price        | tax_rate     |
|:-----------|------------:|:------------:|:------------:|:------------:|
| 00001      |        01   |    0001      |5000          | 8            |
| 00001      |        01   |    0001      |6000          | 10           |

我希望查询返回以下交叉表:

| ID 1       | ID 2        | ID 3         | price_8      | price_10     |  
|:-----------|------------:|:------------:|:------------:|:------------:| 
| 00001      |        01   |    0001      |5000          | 6000         | 
| 00001      |        02   |    0001      |null          | null         |
| 00001      |        01   |    0002      |null          | null         |

这可能吗?

【问题讨论】:

标签: sql postgresql pivot crosstab


【解决方案1】:

试试这个 -

SELECT * FROM crosstab(
       'SELECT A.ID1, A.ID2, A.ID3, B.PRICE, B.TAX_RATE 
        FROM A
        LEFT JOIN B
        ON A.ID1 = B.ID1
        AND A.ID2 = B.ID2
        AND A.ID3 = B.ID3') AS
FINAL_RESULT (ID1 TEXT, ID2 TEXT, ID3 TEXT, PRICE_8 NUMERIC, PRICE_9 NUMERIC);

【讨论】:

    【解决方案2】:

    这是您的表格的示例:

    SELECT split_part(id, '.', 1) AS id1,
    split_part(id, '.', 2) AS id2,
    split_part(id, '.', 3) AS id3,
    price_8, price_10
    FROM crosstab(
      'select id1||''.''||id2||''.''||id3 as id, cast(tax_rate as text) as taxRate, price 
       from (select * from Table1 natural left join Table2
       order by 1,2,3) t'
       )   
    AS ct (
      id text, 
      price_8 int,
      price_10 int
      );
    

    【讨论】:

      猜你喜欢
      • 2011-03-01
      • 1970-01-01
      • 2022-07-29
      • 1970-01-01
      相关资源
      最近更新 更多