我在报告数据库中有两个表格,一个用于订单,另一个用于订单项目。每个订单可以有多个订单项目,为每个数量沿:如何创建一个在Postgresql中返回动态列名的查询?
Orders
+----------+---------+
| order_id | email |
+----------+---------+
| 1 | [email protected] |
+----------+---------+
| 2 | [email protected] |
+----------+---------+
| 3 | [email protected] |
+----------+---------+
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 |
+---------------+----------+----------+--------------+
就报告而言,我喜欢这个数据denormalise到一个单独的PostgreSQL视图(或只是运行一个查询),它可以将数据如上所示:
+----------+---------+-----------+-------+-----+
| order_id | email | Tee Shirt | Jeans | Hat |
+----------+---------+-----------+-------+-----+
| 1 | [email protected] | 1 | 3 | 1 |
+----------+---------+-----------+-------+-----+
| 2 | [email protected] | 2 | 0 | 0 |
+----------+---------+-----------+-------+-----+
| 3 | [email protected] | 3 | 1 | 0 |
+----------+---------+-----------+-------+-----+
即,它是订单中每个项目的数量与产品名称的总和;并将产品名称设置为列标题。我是否需要使用类似crosstab的方法来执行此操作,或者是否存在使用子查询的巧妙方法,即使在查询运行之前我不知道不同产品名称的列表。
如果我不知道不同产品名称的列表,请使用交叉表 –
@Joe:你能解决这个问题吗? – lakshman
不幸的是,我不得不列出每个产品的查询。仍然在寻找一种使用交叉表的好方法 – Joe