有人知道如何在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 |
这可能吗?
答案 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
);