A表是基础表,a1和a2不重复判断A表记录的唯一性
1.更新表A,如a1=b1,a2=b2,则更新a3=b3
2.如a1=b1,但a2<>b2 则B的这条记录视作新记录插入到A,
3.将B.b1不在A.a1里的数据插入到A A表 
a1   a2       a3 
1000 20090101 13 
1000 20090102 16  
1001 20090101 15 
B表
b1 b2 b3
1000 20090101 13
1000 20090102 15
1000 20090103 12
1001 20090101 13
1001 20090301 11
1002 20080901 18
结果表
a1 a2 a3
1000 20090101 13
1000 20090102 15
1001 20090101 13
1001 20090301 11
1002 20080901 18谢谢

解决方案 »

  1.   

    两个T-SQL就好啊. UPDATE;INSERT
      

  2.   

    取巧的!SELEC * INTO #TB FROM 
    (SELECT * FROM A
    UNION ALL
    SELEC * FROM B )AS T1SELECT * FROM 
    #TB  T WHERE NOT EXISTS(SELECT 1 FROM #TB WHERE T.A1=A1 AND T.A2=A2 AND T.A3>A3)
      

  3.   

    SELECT * INTO #TB FROM 
    (SELECT * FROM A
    UNION ALL
    SELECT * FROM B )AS T1SELECT * FROM 
    #TB  T WHERE NOT EXISTS(SELECT 1 FROM #TB WHERE T.A1=A1 AND T.A2=A2 AND T.A3>A3)SELECT 都打不对了!!!
      

  4.   

    ------------------
    1.更新表A,如a1=b1,a2=b2,则更新a3=b3 
    2.如a1=b1,但a2 <>b2 则B的这条记录视作新记录插入到A
    3.a3是随时变化的。T.A3>A3没有意义。
      

  5.   


    declare @t1 table(a1 int,a2 int,a3 int)
    insert @t1
    select 1000,20090101,13 union all
    select 1000,20090102,16 union all
    select 1001,20090101,15declare @t2 table(b1 int,b2 int,b3 int)
    insert @t2
    select 1000,20090101,13 union all
    select 1000,20090102,15 union all 
    select 1000,20090103,12 union all
    select 1001,20090101,13 union all
    select 1001,20090301,11 union all
    select 1002,20080901,18update @t1 set a3=b3 from @t2 where a1=b1 and a2=b2
    insert into @t1(a1,a2,a3) 
    select b1,b2,b3 from @t2 inner join @t1 on a1=b1 where a2<>b2
    insert into @t1(a1,a2,a3)
    select b1,b2,b3 from @t2,@t1 where a1<>b1select distinct a1,a2,a3 from @t1
      

  6.   


    A,B,结果表是我举例,实际A表有2000多条记录,B表数据有一百多条且每天是动态变化的。
      

  7.   

    LZ就两句话
    -- 如果 a1 = b1, a2 = b2, 用b3去更新a3
    update A set
    a3 = b3
    from A表 as A, B表 as b
    where A.a1 = b.b1 and
    A.a2 = b.b2-- 如果 B表左连接A表, 只要不满足a1 = b1 and a2 = b2的条件, 都将记录插入到A表
    -- 在这里, 第二个条与第三个条件其实是一体的, 
    insert into A表
    select b.*
    from B表 as b
    left join A表 as A
    on b.b1 = a.a1 and
    b.b2 = a.a2
    where A.a1 is null
      

  8.   

    非常不错!Tomzzu 的方法应该可行!
    我的A表有8个字段,B表是创建的临时表,有三十多个字段,且B表b1,b2有可能出现重复,只是b3不同。出现重复会出现什么情况,还需进行验证。
    我的顶贴的结果表有误,少了一行记录1000 20090103 12,这行是应该作为新记录插入到A表的。