SQL查询需求:找出在多公司中重复出现的物料数据
解决方法
你的原SQL逻辑存在问题:WHERE FFICMPN = ' 1' AND FFICMPN = ' 2' 永远不会匹配到任何记录,因为单条数据的FFICMPN只能是其中一个值,不可能同时等于两个不同值。
要找出出现不止一次的物料,这里提供几种实用方法:
方法一:分组筛选后关联原表
先通过分组统计找出重复的物料编码,再关联原表获取完整信息,适合大数据量场景:
SELECT t.FFIITMN, t.FFIIDE1, t.FFICMPN FROM S2151BDW.PWRDTA.FFIITMAP t JOIN ( -- 先筛选出出现次数大于1的物料 SELECT FFIITMN FROM S2151BDW.PWRDTA.FFIITMAP GROUP BY FFIITMN HAVING COUNT(*) > 1 ) dup ON t.FFIITMN = dup.FFIITMN ORDER BY t.FFIITMN;
方法二:使用窗口函数(更简洁直观)
通过窗口函数直接给每条数据标记所属物料的总出现次数,再筛选次数大于1的记录:
SELECT FFIITMN, FFIIDE1, FFICMPN FROM ( SELECT FFIITMN, FFIIDE1, FFICMPN, -- 按物料分组统计总出现次数 COUNT(*) OVER (PARTITION BY FFIITMN) AS 出现次数 FROM S2151BDW.PWRDTA.FFIITMAP ) sub WHERE 出现次数 > 1 ORDER BY FFIITMN;
如果仅需要跨公司重复的物料(比如同时属于公司1和2)
如果你的需求是找出同时存在于公司1和公司2的物料(排除同一公司内重复的情况),可以用以下语句:
SELECT FFIITMN, FFIIDE1, FFICMPN FROM S2151BDW.PWRDTA.FFIITMAP WHERE FFIITMN IN ( SELECT FFIITMN FROM S2151BDW.PWRDTA.FFIITMAP WHERE FFICMPN IN (' 1', ' 2') GROUP BY FFIITMN HAVING COUNT(DISTINCT FFICMPN) = 2 -- 确保物料同时存在两个公司的记录 ) ORDER BY FFIITMN;
内容的提问来源于stack exchange,提问作者Dan B.
相关产品推荐
相关产品推荐

