两个表t1,t2;  t1 ,t2都有name,jlsl,wcsl三个字段;t1表内容是 name        jlsl       wcsl                                                        dianyuan     15         24
                                                        xianka        34         23
                                                        xianshiqi     24         20
                                                        jianpan       45         24
                                              t2表内容是 name       jlsl        wcsl
                                               
                                                        dianyuan    12         12
                                                        xianka      11         4怎么写sql语句? 将两个表name相同的对应列进行相减 把两表name不同的列 直接列出即可 .也就是最后结果列出两个表中所有物料 有相同名称的相减  没有相同名称的直接列出对应数值即可.

解决方案 »

  1.   

    name 可作为关联字段  急!!!
      

  2.   

    select a.name,
           a.jlsl-isnull(b.jlsl,0) jlsl,
           a.wcsl-isnull(b.wcsl,0) wcsl
    from t1 a
     left join t2 b
       on a.name=b.name
      

  3.   


    select a.name,abs(a.jlsl-b.jlsl) jlsl,abs(a.wcsl-b.wcsl) wcsl from t1 a 
    left join t2 b where a.name=b.name
    abs 是取绝对值,就不会有负数啦,
    如果楼主需要有负数,去掉就ok啦祝楼主好运!
      

  4.   

    --1.
    select A.name,jlsl = (isnull(A.jlsl,0) + isnull(B.jlsl,0)), wcsl = (isnull(A.wcsl,0) + isnull(B.wcsl,0))
    from t1 A left join t2 B  on A.name = b.name
    --2. 通用些
    select A.name,jlsl = sum(A.jlsl), wcsl = sum(A.wcsl)from 
    (
      select name,jlsl, wcsl from t1
      union 
      select name,jlsl, wcsl from t2
    )A
    group by A.name  
      

  5.   

    select a.name,a.jlsl-isnull(b.jlsl) jlsl, a.wcsl-isnull(b.wcsl) wcsl from t1,t2
      

  6.   

    select A.name,jlsl = (isnull(A.jlsl,0) -isnull(B.jlsl,0)), wcsl = (isnull(A.wcsl,0) - isnull(B.wcsl,0))
    from t1 A left join t2 B  on A.name = b.name