繁体   English   中英

Postgres交叉表查询

[英]Postgres crosstab query

我有一个表,它具有7个不同的类,每个类具有一个面积值。

pid | class| area | 
----+------+------+
2   | 1    | 10   | 
2   | 2    | 10   | 
2   | 6    | 20   | 
4   | 1    | 30   | 
4   | 2    | 40   | 
4   | 3    | 50   | 
4   | 4    | 60   | 
4   | 5    | 70   | 
9   | 6    | 80   | 
11  | 1    | 90   | 
11  | 4    | 10   | 
11  | 7    | 20   | 

但是,我想以一种格式显示此数据,该格式具有每个不同的pid作为列标题,然后使每一行对应一个类区域(即,第一行是每个pid的类1的区域)。

2  |  4  |  9  | 11 |
---+-----+-----+----+
10 |  30 |  0  | 90 |
10 |  40 |  0  |  0 |
0  |  50 |  0  |  0 |
0  |  60 |  0  | 10 |    
0  |  70 |  0  |  0 |
20 |   0 |  60 |  0 |
0  |   0 |  0  | 20 |

是否可以在PostgreSQL中创建这样的输出?

尝试这个:

SELECT 
    SUM(CASE WHEN pid = 2 THEN area ELSE 0 END) As "2",
    SUM(CASE WHEN pid = 4 THEN area ELSE 0 END) As "4",
    SUM(CASE WHEN pid = 9 THEN area ELSE 0 END) As "9",
    SUM(CASE WHEN pid = 11 THEN area ELSE 0 END) As "11"
FROM t
GROUP BY class
ORDER BY class

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM