Usuário com melhor resposta
update com case

Pergunta
-
tenho numa tabela duas linhas onde um coluna possui o mesmo valor. exemplo:
id name valor id_aux
1 name1 10000 1
2 name2 -10000 1
e assim por diante
o que preciso é fazer um update onde na coluna name onde o id_aux seja 1 (neste caso. o valor virá como parametro) sem alterar o campo valor.
é possível eu fazer uma espécie de update com case?
Respostas
-
Rafa, acredito que seria assim;
update tabela set coluna1 = case when flag is null and id_Aux = 1 then @col1 end, coluna2 = case when id_aux = 1 and flag = 1 then @col2 end
Alexandre Matayosi Conde Mauricio.
- Marcado como Resposta rafa-martin quinta-feira, 4 de julho de 2013 21:17
Todas as Respostas
-
Boa tarde,
Rafa, não consegui entender a questão... considerando a tabela que você postou, como deveriam ficar os dados após o Update e quais parâmetros seriam fornecidos?
Assinatura: http://www.imoveisemexposicao.com.br
-
na verdade me expressei mal.
nessa tabela eu tenho uma coluna que é uma flag. nela tem o valor 1 ou 0.
preciso atualizar apenas algumas colunas de acordo com essa flag. só que nessa minha tabela (como citei no primeiro posto) eu posso ter duas linhas com o mesmo id_aux. porque quando quando eu fizer esse update preciso saber qual da linhas tem a flag igual a 1, por exemplo para eu saber quais colunas eu atualizo. pois no meu where será id = @id_aux. ou seja, posso atualizar todas as colunas das duas linhas. quem vai me dizer quais eu posso atualizar ou não é a flag.
entendeu?
-
-
Supondo que a ColunaA deve ser atualizada quando a flag é igual a 0, e que a ColunaB deve ser atualizada quando é igual a 1, acho que poderia ser utilizado um Update conforme segue:
update Tabela set ColunaA = case when Flag = 0 then @ColunaA else ColunaA end, ColunaB = case when Flag = 1 then @ColunaB else ColunaB end where Id = @Id
Espero que seja útil.
Assinatura: http://www.imoveisemexposicao.com.br
- Sugerido como Resposta Junior Galvão - MVPMVP sábado, 6 de julho de 2013 13:56
-
não. como eu vou saber qual coluna eu vou atualizar? não quero fazer dois updates. do jeito normal seria assim:
update tabela set coluna1 = @col1, coluna2 = @col2 where id_aux = 1 and flag = 1
como eu tenho duas linhas na tabela com a coluna id_aux igual 1, irá atualizar as duas colunas, certo? o problema, é que quando minha flag é igual a 1, não posso atualizar as duas colunas do id_aux igual a 1. ou seja, preciso atualizar apenas na coluna 2. e quando minha flag for nulo ou zero aí eu atualizo as duas colunas. na prática seria assim:
update tabela set coluna2 = @col2 where id_aux = 1 and flag = 1
update tabela set coluna1 = @col1, coluna2 = @col2 where id_aux = 1 and flag is null
só que não quero fazer dois updates. por isso perguntei sobre o case no update, para esse caso.
entendeu agora?
-
Rafa, acredito que seria assim;
update tabela set coluna1 = case when flag is null and id_Aux = 1 then @col1 end, coluna2 = case when id_aux = 1 and flag = 1 then @col2 end
Alexandre Matayosi Conde Mauricio.
- Marcado como Resposta rafa-martin quinta-feira, 4 de julho de 2013 21:17
-
-