You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 10:42:23