表A
id    start  end   TypeA   TypeB
1      A      B      2       3
2      B      C      4       5
3      X      Y      6       8
4      M      N      12      9
..表B
id    start    end   Type   STime
1       A       B     A     
2       X       Y     B 
...
现在要用表A的数据更新表B,得到以下结果:
id    start    end   Type   STime
1       A       B     A      2
2       X       Y     B    8
...
怎样做?谢谢!

解决方案 »

  1.   

    Update B Set STime=(Case Type When 'A' Then A.TypeA When 'B' Then A.TypeB  End) From
    B Inner Join A
    On A.start=B.start And A.[end]=B.[end]
      

  2.   

    update b
    set STime=case b.type when  'A' then a.TypeA
         when  'B' then a.TypeB
         else b.STime
         end
    from a,b
    where a.[start]=b.[start]
    and a.[end]=b.[end]
      

  3.   

    UPDATE 表B
    SET Stime=CASE b.Type WHEN 'A' Then a.TypeA ELSE a.TypeB END
    FROM 表B b
    INNER JOIN 表A a
    ON a.start=b.start AND [a.end]=[b.end]随意手写,未经测试
      

  4.   

    谢谢各位,还有一小问题,一并请教.
    有表A:
    id   ETime ATime TimeSpan  
    1     0100  0200   5
    2     0212  NULL   6
    3     0200  NULL   8
    ...
    要得到以下的数据:
    id   ETime   ATime   TimeSpan  ET     AT
    1     0100    0200     5       0105   0205
    2     0212    0212     6       0218   0218
    3     0200    0208     8       0208   0208
    就是说:如果ATime有值,则取ATime的值,否则就取ETime的值,然后与TimeSpan相加.
    我写了一条语句,
    select id,ETime,case when ATime is null then ETime else ATime as ATime,Et=ETime+TimeSpan,AT=ATime+TimeSpan
    却得不到想要的结果,请问如何做?
      

  5.   

    UPDATE A
    SET Atime=ISNULL(Atime,Etime+TimeSpan)
      

  6.   

    我以为你要UPDATE,才这么写的。
    SELECT也一样。SELECT id,Etime,ISNULL(Atime,Etime+TimeSpan) Atime,TimeSpan,ET=Etime+TimeSpan,AT=ISNULL(Atime,Etime+TimeSpan)+TimeSpan FROM A
      

  7.   

    select etime,atime,spantime,etime+spantime as et,
    case when atime is not null then atime+spantime else etime+spantime end as at
    from tablename