Usuário com melhor resposta
Como preencher campos, partindo de uma condição, no Sql Server?

Pergunta
-
Paz e Bem para toda a família...
Estou procurando e querendo saber se existe um recurso que nos permite preencher um campo no SQL Server, partindo da condição de um outro campo! Exemplo:Campo1 = 2
Por favor, tem como fazer: Caso Campo1 = 2 Então Campo2 = 0?
O SQL tem um recurso que nos possibilita preencher um campo, na base da condição ou do valor existente em um outro campo da mesma tabela?
Muito obrigado a todos
- Editado Augustop sábado, 28 de janeiro de 2012 03:57
Respostas
-
Boa Tarde,
Ele existe sim e é conhecido como Computed Columns.
Ainda assim, é mais econômico que você o calcule no SELECT do que armazená-lo se o objetivo é meramente ter o valor. Até porque armazenar o resultado de um cálculo viola a 3FN e você precisaria de uma razão maior para isso, pois, é um gasto de espaço para um cálculo que poderia ser feito. Se a idéia é visualizar sem repetir o cálculo, o uso de Views seria muito bem vindo.Em todo caso, se quiser mesmo assim, segue um exemplo:
create table #tmp (col1 int, col2 int, col3 as case col1 when 1 then col2 else col2 * 2 end)
insert into #tmp (col1, col2) values (1, 0)
insert into #tmp (col1, col2) values (1, 3)
insert into #tmp (col1, col2) values (2, 0)
insert into #tmp (col1, col2) values (2, 3)select * from #tmp
drop table #tmp
[ ]s,
Gustavo Maia Aguiar
Blog: http://gustavomaiaaguiar.wordpress.com
Vídeos: http://www.youtube.com/user/gmasql
Classifique as respostas. O seu feedback é imprescindível- Marcado como Resposta Augustop sábado, 28 de janeiro de 2012 22:51
Todas as Respostas
-
Olá, Augusto!
Cara, não entendi muito bem sua dúvida, mas vou tentar te ajudar.
Pelo que vi, você quer setar um determinado valor em um campo baseado em outro campo. Mostrarei 3 exemplos.
Primeiro usando variáveis:
DECLARE @Campo1 INT DECLARE @Campo2 INT SET @Campo1 = 2 SELECT @Campo2 = CASE @Campo1 WHEN 2 THEN 1 WHEN 3 THEN 2 ELSE 3 END SELECT @Campo2
O valor de @Campo2 será 1.
Agora, definirei o valor de uma variável me baseando em um valor de campo de uma tabela qualquer:
--Crio a tabela e a populo com alguns valores CREATE TABLE tbTeste ( Ordem VARCHAR(10), IdOrdem INT ) GO INSERT INTO tbTeste (Ordem, IdOrdem) VALUES ('Primeiro', 1), ('Segundo', 2), ('Terceiro', 3), ('Quarto', 4), ('Quinto', 5) DECLARE @Ordem VARCHAR(10) SELECT @Ordem = CASE IdOrdem WHEN 1 THEN 'First' WHEN 2 THEN 'Second' WHEN 3 THEN 'Third' WHEN 4 THEN 'Fourth' WHEN 5 THEN 'Fift' ELSE 'Nenhum' END FROM tbTeste WHERE Ordem = 'Segundo' SELECT @Ordem
O valor de @Ordem será Second, pois o campo IdOrdem de 'Segundo' é 2.No terceiro exemplo farei uma atualização no campo Ordem da tabela criada no exemplo acima.
UPDATE tbTeste SET Ordem = CASE IdOrdem WHEN 1 THEN 'First' WHEN 2 THEN 'Second' WHEN 3 THEN 'Third' WHEN 4 THEN 'Fourth' WHEN 5 THEN 'Fift' ELSE 'Nenhum' END FROM tbTeste SELECT * FROM tbTeste
Esse comando atualizará o campo Ordem da tabela conforme o seu Id.
Enfim, em todos os exemplos usei CASE.
Era essa sua dúvida?
- Sugerido como Resposta Philipe Souza sábado, 28 de janeiro de 2012 07:25
- Não Sugerido como Resposta Augustop sábado, 28 de janeiro de 2012 12:08
-
Philipe Souza,
Obrigado pela resposta.
Eu pretendo que uma coluna/campo, tenha um valor atribuido automaticamente. Este valor deve ser atribuido com base em um valor que existe em um outro campo. Por exemplo:
Quando eu abrir a tabela eu pretendo que o Campo/Coluna2 tenha o valor 0, CASO o Campo1 tiver o valor 2! Ou seja, o valor atribuido à Coluna2, vai depender do valor que a Coluna1 tem.
Simulando um CASE, seria:CASE Campo1 tem o valor = 15
Então Campo2 fica com valor =0;
Mas eu pretendo que quando eu abro a tabela, o cálculo seja feito automaticamente e que o Campo2 tenha ja o seu valor.
Estou fuçando muito Philipe mas está difícil!!!!!!!!!
MUITO OBRIGADO PELA ATENÇÃO
- Editado Augustop sábado, 28 de janeiro de 2012 17:10
-
-
Boa Tarde,
Ele existe sim e é conhecido como Computed Columns.
Ainda assim, é mais econômico que você o calcule no SELECT do que armazená-lo se o objetivo é meramente ter o valor. Até porque armazenar o resultado de um cálculo viola a 3FN e você precisaria de uma razão maior para isso, pois, é um gasto de espaço para um cálculo que poderia ser feito. Se a idéia é visualizar sem repetir o cálculo, o uso de Views seria muito bem vindo.Em todo caso, se quiser mesmo assim, segue um exemplo:
create table #tmp (col1 int, col2 int, col3 as case col1 when 1 then col2 else col2 * 2 end)
insert into #tmp (col1, col2) values (1, 0)
insert into #tmp (col1, col2) values (1, 3)
insert into #tmp (col1, col2) values (2, 0)
insert into #tmp (col1, col2) values (2, 3)select * from #tmp
drop table #tmp
[ ]s,
Gustavo Maia Aguiar
Blog: http://gustavomaiaaguiar.wordpress.com
Vídeos: http://www.youtube.com/user/gmasql
Classifique as respostas. O seu feedback é imprescindível- Marcado como Resposta Augustop sábado, 28 de janeiro de 2012 22:51
-