根据另一个表中的行值更新表中的列

时间:2015-06-24 19:48:39

标签: sql-server join sql-update case case-when

我有一个表格,其中包含以下格式的数据:


    id     text       pct
    --     ---      -----
    1        AA        5
    1        BB        3
    1        CC        16
    2        BB        7
    3        CC        13

另一个表TABLE2:


    id     columnAA      columnBB     columnCC
    --     -------       -------      --------
    1        0             0             0
    2        0             0             0
    3        0             0             0


我想更新table2中的列,所以我的结果如下:


    id     columnAA      columnBB     columnCC 
    --     -------       -------      -------- 
    1        5              3             16 
    2        0              7              0 
    3        0              0             13 

我尝试使用此代码,但它并没有真正起作用。它只更新一列!

    update a
      set columnAA = case when b.text = 'AA' then b.pct else columnAA end
     ,set columnBB = case when b.text = 'BB' then b.pct else columnBB end
     ,set columnCC = case when b.text = 'CC' then b.pct else columnCC end
    from table2 a
    join table1 b
      on a.id = b.id

1 个答案:

答案 0 :(得分:0)

正如Tab Allerman所说,你可以这样做:

UPDATE TABLE2
SET columnAA = (SELECT TABLE1.pct FROM TABLE1 WHERE TABLE1.text = 'AA'AND TABLE2.id = TABLE1.id),
columnBB  = (SELECT TABLE1.pct FROM TABLE1 WHERE TABLE1.text = 'BB'AND TABLE2.id = TABLE1.id),
columnCC  = (SELECT TABLE1.pct FROM TABLE1 WHERE TABLE1.text = 'CC'AND TABLE2.id = TABLE1.id)

编辑:

仔细查看您的代码。删除第二个和第三个'Set',它应该工作。您不需要每个都只使用第一个单词“Set”。