我在一个报告数据库中有两个表,一个是订单表,另一个是订单项表。每个订单可以有多个订单项,每个订单项都有对应的数量:
Orders
+----------+---------+
| order_id | email |
+----------+---------+
| 1 | 1@1.com |
+----------+---------+
| 2 | 2@2.com |
+----------+---------+
| 3 | 3@3.com |
+----------+---------+
Order Items
+---------------+----------+----------+--------------+
| order_item_id | order_id | quantity | product_name |
+---------------+----------+----------+--------------+
| 1 | 1 | 1 | Tee Shirt |
+---------------+----------+----------+--------------+
| 2 | 1 | 3 | Jeans |
+---------------+----------+----------+--------------+
| 3 | 1 | 1 | Hat |
+---------------+----------+----------+--------------+
| 4 | 2 | 2 | Tee Shirt |
+---------------+----------+----------+--------------+
| 5 | 3 | 3 | Tee Shirt |
+---------------+----------+----------+--------------+
| 6 | 3 | 1 | Jeans |
+---------------+----------+----------+--------------+
为了报告目的,我希望将这些数据反规范化到一个单独的PostgreSQL视图中(或仅运行一个查询),将上面的数据转换成以下形式:
+----------+---------+-----------+-------+-----+
| order_id | email | Tee Shirt | Jeans | Hat |
+----------+---------+-----------+-------+-----+
| 1 | 1@1.com | 1 | 3 | 1 |
+----------+---------+-----------+-------+-----+
| 2 | 2@2.com | 2 | 0 | 0 |
+----------+---------+-----------+-------+-----+
| 3 | 3@3.com | 3 | 1 | 0 |
+----------+---------+-----------+-------+-----+
ie,它是订单中每个项目数量的总和,以产品名称为列标题。我是否需要使用类似于crosstab的东西来完成这个任务,或者是否有一种聪明的方法可以使用子查询,即使在查询运行之前我不知道不同产品名称的列表。