2011-09-01 149 views
2

我有一个场景,在这里我运行2个单独的更新查询。 如何通过使用案例将这些组合成单个查询?CASE语句更新

UPDATE TABLE1 SET ACTV_IND = 0 
WHERE NAME IN (
    select NAME 
    from TABLE1 
    where SID = 'child' 
    group by NAME 
    having MAX(CAST(ACTV_IND AS INT)) =0 
) 
AND SID = 'parent' 
UPDATE TABLE1 SET ACTV_IND = 1 
WHERE NAME IN (
    select NAME 
    from TABLE1 
    where SID = 'child' 
    group by NAME 
    having MAX(CAST(ACTV_IND AS INT)) =1 
) 
AND SID = 'parent' 

回答

1

Q1:我想这可能是解决

ACTV_IND = MAX(CAST(ACTV_IND AS INT)) 

Q2:可以使用加入了更新

UPDATE T1 SET T1.C1 = :val1 FROM TABLE1 T1 join TABLE T2 ON T1.KEY1 = T2.KEY2 

我会试一下这个像这样,假设MAX(CAST(ACTV_IND AS INT))将返回0或1

WITH DATA_SOURCE (NAME, VAL) AS (
select NAME, MAX(CAST(ACTV_IND AS INT)) VAL from TABLE1 where SID = 'child' group by NAME 
) 
UPDATE TABLE1 
SET ACTV_IND = DS.VAL 
FROM TABLE1 T1 JOIN DATA_SOURCE DS ON T1.NAME = DS.NAME 
WHERE T1.SID = 'parent' 
GO