更新满足以下条件的记录:    
  如果有LIKE "2%"则更新所有LIKE "2%"的,
  否则更新>2的最小的记录
    以上两个条件满足后,还需同时满足StepSts=0
条件字段StepNum的几个取值如下:
第一种情况
  StepNum   StepSts
    1         10
    2         10
    21        10
    22        10
    23        10
    3          0
    4          0
    5          0
结果应当是StepNum=3
第二种情况
  StepNum   StepSts
    1         10
    2         10
    21         0
    22         0
    23         0
    3          0
    4          0
    5          0
结果应当是StepNum=21,22,23
请问如何用一条SQL语句完成

解决方案 »

  1.   

    UPDATE tb SET 
    StepNum = xx
    WHERE StepNum IN(
    -- 条件1
    SELECT StepNum FROM tb
    WHERE StepSts=0
    AND StepNum LIKE '2%'
    UNION ALL
    -- 条件2
    SELECT StepNum = MIN(StepNum) FROM tb
    WHERE StepSts=0
    AND StepNum > 2
    AND NOT EXISTS(
    SELECT StepNum FROM tb
    WHERE StepSts=0
    AND StepNum LIKE '2%')
    )
      

  2.   

    update tb set
    set StepNum = value
    where StepNum IN
    (
    --条件一
      select StepNum from tb where StepNum like '2%' and StepSts = 0
      union all
    --条件二
      select min(StepNum) from 
      (select StepNum from tb where StepNum not in (select StepNum from tb where StepNum like '2%' and StepSts = 0) t where StepSts = 0 and StepNum > 2)
      

  3.   

    StepNum   StepSts
        1         10
        2         10
        21        10
        22        10
        23        10
        3          0
        4          0
        5          0
    结果应当是StepNum=3
    第二种情况
      StepNum   StepSts
        1         10
        2         10
        21         0
        22         0
        23         0
        3          0
        4          0
        5          0
    结果应当是StepNum=21,22,23
    update A
    set StepNum=Value
    from tableName A
    inner join 
    (
    select * from tableName where ...相应的条件) B 
    on A.StepNum=B.StepNum
    where A.StepNum like '2%'