表A:(子集)
  ModelType      No      Code      位置
   A1            AXAX    123321     D
   A2            MAMA    C1232      E
   A3            MARK    DEFGK      E
   
表B (此表为超集,A中的前三列在B中一定存在) 
 ModelType      No      Code      位置   数量
   A1            AXAX    123321     E     10
   A2            MAMA    C1232      E     20
   A3            MARK    DEFGK      D     20要求:查出与A中 ModelType No Code 位置 均相同的记录,取出数量,与A组合成新的记录,如果有位置不同 显示0最终结果应该是:
   
 
 ModelType      No      Code       数量
   A1            AXAX    123321     0       (位置不同,所以为0)
   A2            MAMA    C1232      20
   A3            MARK    DEFGK      0 
设计语句:
   Select A.*,(这里的怎么写) AS 数量 from A

解决方案 »

  1.   

    Select A.*,isnull(b.数量,0) AS 数量 from A 
    left join b
    on a.ModelType=b.ModelType and a.No=b.No and a.Code=b.Code and a.位置=b.位置
      

  2.   

    Select A.*,isnull((select 数量 from B 
                   where ModelType=A.ModelType and No=A.No and Code=A.Code 
                     and 位置=A.位置),0) AS 数量 from A
      

  3.   

    select
     a.*,isnull(b.数量,0)  数量 
    from
     a 
    left join
     b
    on
     a.ModelType=b.ModelType and a.No=b.No and a.Code=b.Code 
    and 
     a.位置=b.位置
      

  4.   

    首先按你的意思是,A中的前3列数据一定会在B中出现,有可能A中的位置和B中的位置不同。如果是相同的,列出前3列和B中的“数量”列,如果不同,则列出前3列,“数量”为0。
    SELECT A.ModelType,A.NO,A.Code,CASE WHEN A.位置=B.位置 THEN B.数量 ELSE 0 END AS 数量
    FROM A JOIN B ON A.ModelType=B.ModelType AND A.NO=B.NO AND A.Code=B.Code
    同时建议你在A中建一个编号,在B中使用A的编号进行对应。这样两个表联合的时候会更快,也减少数据冗余和修改删除出错的机会。