You need to enable JavaScript to run this app. SQL实现:保留同一number下存在不同spec的所有数据行
优惠活动
大模型
产品
解决方案
定价
更多

SQL实现:保留同一number下存在不同spec的所有数据行

实现逻辑

核心是两步筛选:

  • 第一步:按需求里的number对应分组字段(即你查询里的partno)做分组,统计每组下spec对应比对字段的去重值数量,仅保留去重数>1的分组ID,这类分组下比对字段取值不完全一致,符合全量保留的要求。
  • 第二步:原基础关联查询仅返回属于上述有效分组的所有行即可。
适配现有SQL的代码实现

字段映射说明:默认partno对应需求的number分组列,你可根据实际业务替换HAVING子句里的比对字段(对应需求的spec列),比如当前示例以g08huqty为比对字段,若实际比对的是partdsc1直接替换即可。

写法1(CTE 可读性更高,适合大表查询):

WITH valid_groups AS (
    SELECT L62T1.partno
    FROM L62T1
    JOIN G08T1 ON G08T1.shortl62 = L62T1.shortl62
    GROUP BY L62T1.partno
    -- 比对字段去重数大于1,说明同分组下取值不完全一致
    HAVING COUNT(DISTINCT G08T1.g08huqty) > 1
)
SELECT 
    L62T1.partno, 
    L62T1.partdsc1, 
    G08T1.g08huqty
FROM L62T1
JOIN G08T1 ON G08T1.shortl62 = L62T1.shortl62
-- 仅保留有效分组的行
JOIN valid_groups ON valid_groups.partno = L62T1.partno

写法2(IN 子查询 写法更简洁):

SELECT 
    L62T1.partno, 
    L62T1.partdsc1, 
    G08T1.g08huqty
FROM L62T1
JOIN G08T1 ON G08T1.shortl62 = L62T1.shortl62
WHERE L62T1.partno IN (
    SELECT L62T1.partno
    FROM L62T1
    JOIN G08T1 ON G08T1.shortl62 = L62T1.shortl62
    GROUP BY L62T1.partno
    HAVING COUNT(DISTINCT G08T1.g08huqty) > 1
)
注意事项
  • 若你实际的分组字段不是partno,可全局替换成对应字段名即可。
  • 若比对字段需要忽略大小写、空值等特殊规则,可在COUNT(DISTINCT 比对字段)前增加对应的处理函数,比如COUNT(DISTINCT UPPER(G08T1.g08huqty))。

内容的提问来源于stack exchange,提问作者Fredrik Rothman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 23:06:03