簡體   English   中英

PostgreSQL交叉表選擇查詢

[英]PostgreSQL Crosstab Select Query

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

這可能嗎?

嘗試這個 -

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

這是您的表的示例:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM