SQL Server多表关联查询:获取FACA发票最新产品价格并匹配订单
解决同一产品返回多价格的SQL修正方案
问题核心是没精准锁定每个产品在FACA类发票里的最新价格,导致同一产品对应多条不同价格的记录。下面是修正后的SQL写法,分两步实现需求:
第一步:获取FACA类发票中各产品的最新价格
用窗口函数ROW_NUMBER()按产品分组,按发票日期倒序排序,取每个产品的第一条(最新日期)记录:
WITH latest_faca_prices AS ( SELECT d.art_code, d.art_price, -- 按产品分组,发票日期倒序,给每条记录排号 ROW_NUMBER() OVER (PARTITION BY d.art_code ORDER BY doc.doc_date DESC) AS rn FROM document doc JOIN documentd d ON doc.doc_num = d.doc_num WHERE doc.doc_type = 'FACA' ) -- 只保留每个产品的最新价格记录 SELECT art_code, art_price FROM latest_faca_prices WHERE rn = 1
第二步:关联订单表筛选匹配产品
把第一步的结果作为临时表,和订单表关联,筛选出匹配的产品:
WITH latest_faca_prices AS ( SELECT d.art_code, d.art_price, ROW_NUMBER() OVER (PARTITION BY d.art_code ORDER BY doc.doc_date DESC) AS rn FROM document doc JOIN documentd d ON doc.doc_num = d.doc_num WHERE doc.doc_type = 'FACA' ) SELECT ord.ORDER, lfp.art_code, lfp.art_price FROM orders ord JOIN latest_faca_prices lfp ON ord.ART_CODE = lfp.art_code WHERE lfp.rn = 1
关键说明
PARTITION BY d.art_code确保每个产品单独排序,不会和其他产品的记录混排ORDER BY doc.doc_date DESC让最新的发票排在前面,rn=1直接锁定该产品的最新价格- 最终关联订单表时,每个匹配产品只会返回一条唯一的最新价格记录,不会出现重复价格的情况
内容的提问来源于stack exchange,提问作者MOHAMED NEJI
相关产品推荐
相关产品推荐

