首页 > 解决方案 > 将不同表中的列相乘

问题描述

我有两张桌子RepairDetailsRepairs.

表格内Repairs列出了我们提供的维修类型及其费用。

+-------------+---------------+
| repair_desc | repair_price  |
+-------------+---------------+
|  BasicHB    |   50.00       |
|  AdvHB      |   80.00       |
|  CCRepair   |   40.00       |
|  CCReplace  |   80.00       |
+-------------+---------------+

RepairDetails表格内,有一个记录,unit_id每个unit_iddetail_id附有一个记录,列出了适用于该单元的每种维修类型的数量。

+-----------+-----------+----------+-------+----------+-----------+
| detail_id |  unit_id  |  BasicHB | AdvHB | CCRepair | CCReplace |  
+-----------+-----------+----------+-------+----------+-----------+
|  1        |     1     |     2    |  0    |   0      |   1       |
+-----------+-----------+----------+-------+----------+-----------+

unit_id用作将其与 a 关联的另一个表上的主键order_id,然后将其用作order_id将其与 a 关联的另一个表上的主键customer_id

我需要的是创建一个查询,该查询将获取表上列中的值RepairDetails并将它们乘以表repair_cost中各自的列Repairs。最后,我希望能够基于customer_id. 这是我更加迷失的地方,因为我相信会有不止一种JOINcustomer_idorder_idunit_iddetail_id。在这方面的任何帮助也将不胜感激!

非常感谢!

标签: sqlstored-procedures

解决方案


您可以尝试使用以下代码:

select  detail_id
      , unit_id
      , BasicHB*(select repair_price from Repairs where repair_desc = 'BasicHB') 
          as BasicHB_RepairDetailCost
      , AdvHB*(select repair_price from Repairs where repair_desc = 'AdvHB') 
          as AdvHB_RepairDetailCost
      , CCRepair*(select repair_price from Repairs where repair_desc = 'CCRepair') 
          as CCRepair_RepairDetailCost
      , CCReplace*(select repair_price from Repairs where repair_desc = 'CCReplace') 
          as CCReplace_RepairDetailCost
from RepairDetails
--inner join Units on (Units.unit_id = RepairDetails.unit_id)
--inner join Orders on (Orders.order_id = Units.order_id)
--inner join Customers on (Customers.customer_id = Orders.customer_id)
--where Customers.customer_id = 

在这个基本规模上,它应该适用于 Oracle 和 SQL Server。

如果这不是您想要的,请在评论中说明,我会尽力为您调整。


推荐阅读