我在報告數據庫中有兩個表格,一個用於訂單,另一個用於訂單項目。每個訂單可以有多個訂單項目,爲每個數量沿:如何創建一個在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