2011-09-01 10 views
2

私はここで2つの別々の更新クエリを実行しているシナリオを持っています。 ケースを使用してそれらを1つのクエリに結合するにはどうすればよいですか?更新の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 
関連する問題