首页 文章

PostgreSQL交叉表选择查询

提问于
浏览
0

有没有人知道如何在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         |

这可能吗?

2 回答

  • 0

    试试这个 -

    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);
    
  • 0

    以下是表格的示例:

    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
      );
    

相关问题