表一, 
   字段:   id   col1   col2   Qty1   Qty2
   数据:    1   101    1001    0      0
   数据:    2   102    1002    0      0表二,
   字段:   type    col1   col2   col3 
   数据:   qty1    101    1001   23
   数据:   qty2    101    1001   18   
   数据:   qty1    102    1003   34update表一,得到的结果
   字段:   id   col1   col2   Qty1   Qty2
   数据:    1   101    1001    23     18
   数据:    2   102    1002    34      0列 col1 和 col2 为判断条件!这样的一条sql 应该怎么写!  要高效率的!  谢啦!!

解决方案 »

  1.   

    本帖最后由 libin_ftsafe 于 2009-10-19 16:24:39 编辑
      

  2.   

    update 表一 set Qty1=b.col3,Qty2=isnull(c.col3,0)
    from 表一 a inner join 表二 b 
    on a.col1=b.col1 and a.col2=b.col2
    and right(b.[type],1)='1'
    inner join 表二 c 
    on a.col1=c.col1 and a.col2=c.col2
    and right(c.[type],1)='2'
      

  3.   

    CREATE TABLE #T1(id INT, col1 INT, col2 INT, Qty1 INT, Qty2 INT)
    INSERT #T1 SELECT
      1,  101,    1001 ,   0,      0  UNION ALL SELECT
      2 , 102   , 1002    ,0,      0 
    CREATE TABLE #T2(TYPE VARCHAR(5), col1 INT, col2 INT, COL3 INT)
    INSERT #T2 SELECT
     'qty1',    101,    1001 , 23 UNION ALL SELECT
     'qty2',    101,    1001 , 18  UNION ALL SELECT
     'qty1',    102,    1002 , 34 
    UPDATE #T1 
    SET qTY1=B.QTY1,qTY2=B.QTY2
    FROM #T1 A,
    (SELECT COL1,COL2,
    QTY1=MAX(CASE WHEN TYPE='QTY1' THEN COL3 END),
    QTY2=MAX(CASE WHEN TYPE='QTY2' THEN COL3 END)
    FROM #T2
    GROUP BY COL1,COL2) B
    WHERE A.COL1=B.COL1 AND A.COL2=B.COL2 SELECT * FROM #T1
    id          col1        col2        Qty1        Qty2
    ----------- ----------- ----------- ----------- -----------
    1           101         1001        23          18
    2           102         1002        34          NULL(2 行受影响)DROP TABLE #T1
    DROP TABLE #T2
      

  4.   

    分2次update
    update a
    set qty1=b.col3
    from 表1 a,表2 b 
    where a.col1=b.col1 and a.col2=b.col2 and type='qty1'
    update a
    set qty2=b.col3
    from 表1 a,表2 b 
    where a.col1=b.col1 and a.col2=b.col2 and type='qty2'