基于销售零件号的订单报价对比计算需求技术问询
解决方案:基于SQL的订单报价对比查询
首先咱们先明确需求的核心要点,确保没理解错:
- 按**销售零件号(sales part number)**分组,对比两份报价的销售额
- 计算三份关键数值:
- 报价1(Q1)总销售额:
Q1销售数量 × Q1投标价格 - 报价2(Q2)总销售额:
Q2销售数量 × Q2投标价格 - 期望总销售额:如果零件在Q2中存在,用
Q2销售数量 × Q1投标价格;如果零件只在Q1中存在,用Q1销售数量 × Q1投标价格
- 报价1(Q1)总销售额:
假设的表结构
我先假设你的两份报价数据分别存在两个表中,表结构如下(如果实际表名/字段名不同,替换成你的即可):
quotation_1(Q1数据):包含字段sales_part_number,sales_qty,bid_pricequotation_2(Q2数据):包含字段sales_part_number,sales_qty,bid_price
最终SQL查询语句
SELECT -- 取存在的零件号作为分组键(覆盖仅Q1或仅Q2存在的情况) COALESCE(q1.sales_part_number, q2.sales_part_number) AS sales_part_number, -- 计算Q1总销售额(仅当零件在Q1存在时才有值,否则为0) COALESCE(q1.sales_qty * q1.bid_price, 0) AS q1_total_sales, -- 计算Q2总销售额(仅当零件在Q2存在时才有值,否则为0) COALESCE(q2.sales_qty * q2.bid_price, 0) AS q2_total_sales, -- 计算期望总销售额,按需求逻辑判断 CASE -- 零件在Q2存在时,用Q2数量×Q1价格 WHEN q2.sales_part_number IS NOT NULL THEN COALESCE(q2.sales_qty * q1.bid_price, 0) -- 零件仅在Q1存在时,用Q1数量×Q1价格 ELSE COALESCE(q1.sales_qty * q1.bid_price, 0) END AS expected_total_sales FROM quotation_1 q1 -- 使用全连接来保留两边所有的零件号,处理存在差异的情况 FULL JOIN quotation_2 q2 ON q1.sales_part_number = q2.sales_part_number GROUP BY COALESCE(q1.sales_part_number, q2.sales_part_number), q1.sales_qty, q1.bid_price, q2.sales_qty, q2.bid_price ORDER BY sales_part_number;
关键逻辑解释
FULL JOIN:用来同时保留Q1和Q2中所有的销售零件号,即使某份报价里没有这个零件,也能在结果中显示出来,完美处理“偶有差异”的场景。COALESCE函数:用来处理NULL值,比如当零件仅存在于Q2时,Q1的字段会是NULL,这时候用COALESCE把计算结果转为0,避免出现NULL影响报表可读性。CASE语句:严格按照你的需求判断期望总销售额的计算方式,确保逻辑准确。
如果你的实际表结构或字段名有调整,只需要替换对应名称即可,这个查询逻辑可以直接复用~
内容的提问来源于stack exchange,提问作者Martin Witczak
相关产品推荐
相关产品推荐

