Oracle SQLDeveloper,使用带有另一个表的计算列

时间:2017-05-16 16:54:05

标签: sql oracle

我正在尝试创建一个数据库,该数据库将由为汽车维修店制作的应用程序使用。 我有一个服务'表中列出了几个具有相应价格的服务(例如换油,30美元)。我有另一张桌子"维修"我存储有关客户维修的信息。此表格的列价必须使用表格'服务'中的每个服务价格计算。 我熟悉使用'计算列的概念' ,但似乎我无法使用另一个表中的值计算列。 我在这里遗漏了什么或者我该如何处理这个问题?

1 个答案:

答案 0 :(得分:0)

有一个名为" Price"的列在表格#34;维修",如果您试图存储提供给客户的所有服务的总价格,您不应该这样做。

为什么不尝试将服务记录插入"维修"提供给具有客户ID和维修ID的客户的每项服务的表。每项服务都将指向"服务"带有外键的表。这样您就可以查询维修的总价格,或者您可以创建一个显示所有维修总价格的视图。

以下是样本表的创建脚本:

-- Table named SERVICES:
CREATE TABLE "SERVICES" 
(
"SERVICE_ID" NUMBER NOT NULL ENABLE, 
"SERVICE_NAME" VARCHAR2(20 BYTE), 
"SERVICE_PRICE" NUMBER, 
CONSTRAINT "SERVICES_PK" PRIMARY KEY ("SERVICE_ID")
)

-- Table named CUSTOMERS:
CREATE TABLE "CUSTOMERS" 
(
"CUSTOMER_ID" NUMBER NOT NULL ENABLE, 
"CUSTOMER_NAME" VARCHAR2(20 BYTE), 
CONSTRAINT "CUSTOMERS_PK" PRIMARY KEY ("CUSTOMER_ID")
)

-- Table named REPAIRS:
CREATE TABLE "REPAIRS" 
(
"REPAIR_ID" NUMBER NOT NULL ENABLE, 
"CUSTOMER_ID" NUMBER NOT NULL ENABLE, 
"REPAIR_DATE" DATE, 
CONSTRAINT "REPAIRS_PK" PRIMARY KEY ("REPAIR_ID")
)

-- Table named REPAIR_SERVICES:
CREATE TABLE "REPAIR_SERVICES" 
(
"REPAIR_ID" NUMBER NOT NULL ENABLE, 
"SERVICE_ID" NUMBER NOT NULL ENABLE, 
CONSTRAINT "REPAIR_SERVICES_FK_1" FOREIGN KEY ("REPAIR_ID") REFERENCES "HR"."REPAIRS" ("REPAIR_ID") ENABLE, 
CONSTRAINT "REPAIR_SERVICES_FK_2" FOREIGN KEY ("SERVICE_ID") REFERENCES "HR"."SERVICES" ("SERVICE_ID") ENABLE
)

如果您按照上述方式构建表格,则可以使用下面的脚本创建一个视图,该视图将为您提供包括所有服务在内的维修总成本。或者您可以使用该脚本进行查询。

CREATE VIEW V_REPAIR_PRICES AS (
SELECT REPAIRS.REPAIR_ID, REPAIRS.REPAIR_DATE, CUSTOMERS.CUSTOMER_NAME, T1.TOTAL_PRICE
FROM REPAIRS
INNER JOIN CUSTOMERS ON REPAIRS.CUSTOMER_ID = CUSTOMERS.CUSTOMER_ID
INNER JOIN

(
  SELECT REPAIR_SERVICES.REPAIR_ID, SUM(SERVICES.SERVICE_PRICE) as TOTAL_PRICE
  FROM REPAIR_SERVICES
  INNER JOIN SERVICES ON REPAIR_SERVICES.SERVICE_ID = SERVICES.SERVICE_ID
  GROUP BY REPAIR_SERVICES.REPAIR_ID
) T1

ON REPAIRS.REPAIR_ID = T1.REPAIR_ID
)