PostgreSQL交叉表选择查询

时间:2018-07-04 15:47:37

标签: sql postgresql pivot crosstab

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

表A

Control m y

表B

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

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

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

这可能吗?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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
  );
相关问题