CASE заявление в обновлении - PullRequest
       0

CASE заявление в обновлении

2 голосов
/ 02 сентября 2011

У меня есть сценарий, где я запускаю 2 отдельных запроса на обновление.Как я могу объединить их в один запрос, используя регистр?

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 Ответ

1 голос
/ 02 сентября 2011

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...