sql - SQL根据特定条件计算供应商折扣
问题描述
我有一个折扣表,其中列出了有资格获得折扣的供应商和折扣百分比。此折扣也基于项目类别。我想列出所有供应商、他们提供的物品以及每个物品(如果它们属于该类别)的适用折扣。还有一种特殊情况,如果折扣表中缺少类别,则供应商有资格获得他们销售的所有商品的折扣。在我下面的示例中,供应商 4 和 5 有资格获得他们销售的所有商品的折扣
这是我在 MySQL 中尝试的代码,但这适用于不符合折扣条件的商品 -
SELECT asl.supplier_id,i.item_id, i.cat,d.discount
from all_supplier asl left outer join discount d on asl.supplier_id = d.supplier_id
left outer join supplier_item si on d.supplier_id = si.supplier_id
left outer join item i on si.item_id = i.item_id;
这是我得到的实际结果,请注意供应商 1 和项目 3,应该没有折扣。也有供应商提供的物品未在折扣中列出。此列表中缺少供应商 6,7 提供的物品
样本数据集
解决方案
尝试为折扣表利用更复杂的连接条件。这个应该工作:
SELECT
s.supplier_id,
i.item_id,
i.cat,
d.discount
FROM all_supplier s
LEFT JOIN supplier_item si
ON si.supplier_id = s.supplier_id
LEFT JOIN item i
ON i.item_id = si.item_id
LEFT JOIN discount d
ON d.supplier_id = s.supplier_id
AND (d.cat = i.cat OR d.cat IS NULL)
ORDER BY s.supplier_id, i.item_id
推荐阅读
- firebase - 使用 order by 子句时 Flutter Firestore 流不更新
- architecture - 如何将业务逻辑重构为域实体中的第三方服务调用?
- javascript - ReactJS - 状态数组的映射
- javascript - 在 JavaScript 中将 HTTP 响应保存为字符串
- lit-element - 覆盖 createRenderRoot 后如何访问 lit-element 渲染根?
- mean - Python中什么包有统计均值功能
- javascript - 点击后启动自动完成
- express - Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 1 Error with React, Babel and Webpack
- reactjs - GraphQL 内联片段检查是否存在,然后在 .map 中输出
- javafx - Javafx 应用程序在 Android 手机上运行时崩溃