我有一个查询表,用于查询产品的不同类型的成本。关系是 1个产品与许多成本。我想创建一个查询以有效选择所有具有不同成本的产品。
我需要确定一组6个不同的费用,才能在结果集中显示为单独的列。
到目前为止,我已尝试在同一张表上进行6种不同的LEFT JOIN
处理,每种6种费用类型都进行一种处理。我觉得应该有一个更好的方法。
以下是这两个表的相关列以及我到目前为止的尝试。例如,我将成本类型的数量从6个减少到2个。
Products
表 +------------+
| product_id |
+------------+
| 1001 |
| 1002 |
| 1003 |
+------------+
Costs
表 +---------+------------+-----------+-------------+
| cost_id | product_id | cost_type | cost_amount |
+---------+------------+-----------+-------------+
| 1 | 1001 | Labor | 50.01 |
| 2 | 1001 | Material | 488.92 |
| 3 | 1002 | Labor | 132.11 |
| 4 | 1002 | Material | 0.24 |
| 5 | 1003 | Labor | 33.34 |
+---------+------------+-----------+-------------+
SELECT
p.product_id
c1.cost_amount AS labor_cost
c2.cost_amount AS material_cost
FROM products p
LEFT JOIN costs c1
ON p.product_id = c1.product_id
AND cost_type = 'Labor'
LEFT JOIN costs c2
ON p.product_id = c2.prduct_id
AND cost_type = 'Material'
+------------+------------+---------------+
| product_id | labor_cost | material_cost |
+------------+------------+---------------+
| 1001 | 50.01 | 488.92 |
| 1002 | 132.11 | 0.24 |
| 1003 | 33.34 | NULL |
+------------+------------+---------------+