我正在为一家汽车修理厂设计一个数据库.每种车型都有特定服务的特定成本.一、 丰田凯美瑞-换油-250美元,丰田卡罗拉-换油-300美元.

一项服务可以使用多个备件.我正在try 编写一个查询,向客户开具账单.当一个服务只使用一个部件时,查询工作正常.但是,当使用多个部件时,服务成本将与部件成本一起多次收取.理想情况下,任何重复服务(包含不同部分)的成本应为0美元,以便我可以正确地向客户开具发票.

以下是我的SQL代码:

SELECT s.name                                                 AS 'Service',
       cost                                                   AS `Cost of Service`,
       p.name                                                 AS `Part Used`,
       quantity                                               AS `Quantity`,
       price_sold                                             AS 'Cost of Part',
       (SELECT Quantity * `Cost of Part` + `Cost of Service`) AS `Total Bill`
FROM work_order
         JOIN client ON client.client_ID = work_order.client_ID
         JOIN vehicle v ON v.vehicle_ID = work_order.vehicle_ID
         JOIN model m ON m.model_ID = v.model_ID
         JOIN completed_work_order cwo ON work_order.work_order_ID = cwo.work_order_ID
         JOIN service s ON s.service_ID = cwo.service_ID
         JOIN model_services ms ON m.model_ID = ms.model_ID AND s.service_ID = ms.service_ID
         JOIN used_parts up ON cwo.completed_work_order_ID = up.completed_work_order_ID
         JOIN part p ON p.part_ID = up.part_ID
WHERE client.client_ID = 6;

Here is the result: Result of Query

正如您所看到的,服务"动力转向判断"出现了两次,这很有意义,但服务成本也再次出现,因此客户的账单不正确.

奖励:如果有一种方法可以在末尾添加一个自定义行,即"总账单"列的总和,那将是惊人的.(但这是第二优先事项).

推荐答案

另一个Angular (假设测试是原始数据集).

它还包括最终的总成绩,以便在最后给出一个大的总成绩.

如果不需要,那么内部子查询就足够了.

select t1.*, 
sum(total_amount) over (order by service_name, part_name) final_running_total
from 
(select t.*, 
case when service_name <> ifnull((lead(service_name) over (order by null)), 
'null') 
then amount  + sum(qty * part_cost) over (partition by service_name 
order by part_name)
else 
0 end as total_amount
from test t) t1

DB小提琴here.

Mysql相关问答推荐

是否有一种方法可以在mysql中设置一列,使其自动成为该行的行号的值?

SQL:CAST与窗口函数组合导致语法错误

Mysql-查找缺少列的表

从 NextJS/Prisma 添加用户 ID (FK) 到 MySQL 表

MySQL 8.0 可以在 Select 语句中返回 JSON 对象数组吗?

如何解码存储在带有type*:前缀的base64中的数据?

基于其列之一内的值查询模型

分别针对每个不同的列 Select 聚合

有人可以帮我优化这个查询吗?

MySql,如何从列中替换某种格式的字符串

访问 nodejs、mysql 和 json 中的嵌套对象数组

插入二进制数据会导致Data too long for column...

MySQL - 考虑到所有前几天,每天计算唯一用户

Select 多列但仅按 1 列分组

DECIMAL(m, n) 在 64 位系统中如何表示?

Select 在同一天售出不同活动门票的收银员

如何在 Mysql 中创建复合外键

MySQL错误 1005 (HY000): 无法创建表 'foo.#sql-12c_4' (errno: 150)

从 MySQL 中的日、月、年字段创建日期

MySQL合并两列并添加到一个新列中