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

关联多表后SQL查询返回两行,如何合并为单行结果?

解决SQL关联后多行合并为一行的问题

问题分析

你的SQL语句通过OR条件关联NMaterial表,导致OriginMaterial_FN和MaterialCode_PFN分别匹配到NMaterial中的记录时,生成两行数据。DISTINCT和GROUP BY无法解决是因为这两行的部分字段值存在差异,无法直接合并。

解决方案

不要用OR做关联条件,而是两次关联NMaterial表,分别对应原始物料和替代物料,就能在同一行中获取所有所需字段:

SELECT 
    A.ModelCode_PFN AS ModelCode
    , B.Name_N AS ModelName
    , A.OriginMaterial_FN AS OriginMaterial
    , C1.PartNumber_N AS OriginPartNo
    , C1.Property_N AS OriginProperty
    , C1.Vender_N AS OriginVender
    , A.MaterialCode_PFN AS AltMaterial
    , A.PartNumber_N AS AltPartNo
    , C2.Property_N AS AltProperty
    , C2.Vender_N AS AltVender
FROM 
    NBOM AS A WITH(NOLOCK)
INNER JOIN 
    NModel AS B WITH(NOLOCK) ON A.ModelCode_PFN = B.Code_PNU
LEFT JOIN 
    NMaterial AS C1 WITH(NOLOCK) ON A.OriginMaterial_FN = C1.Code_PNU
LEFT JOIN 
    NMaterial AS C2 WITH(NOLOCK) ON A.MaterialCode_PFN = C2.Code_PNU
WHERE 
    A.OriginMaterial_FN = '0RHAA-0211A'

补充说明

  • 用LEFT JOIN可以避免因某一方物料不存在于NMaterial表时丢失整条记录,如果确认两个物料都一定存在,也可以替换为INNER JOIN。
  • 给两次关联的NMaterial表分别取别名C1和C2,明确区分原始物料和替代物料的字段来源,从而将原本分散在两行的数据整合到同一行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 20:24:54