Adicionar nova coluna com dados em uma tabela existente

25/11/2013

0

Amigos, sou novo no sql e estou com uma dúvida, poderia os amigos me auxiliarem.
(Estou usando o sql server 2008)

Gostaria de adicionar uma coluna em uma tabela existente, nessa coluna teria duas condições.

Exemplo: Na tabela atual tenho 3 colunas ( cidade, valor, mês), gostaria de criar uma quarta coluna nessa tabela com o nome 'RJ_MES_JANEIRO' com as seguinte condição (se o campo da coluna [b]cidade[/b] for igual a Rio de Janeiro e o campo da coluna [b]mês[/b] for igual a janeiro então nessa quarta coluna vai retornar o campo da coluna [b]valor[/b], caso contrário retornará zero.
Link da tabela atual e de como gostaria que ela ficasse:[url]http://imageshack.com/a/img96/7825/nsfg.png[/url]

Desde já agradecido a todos.
Luiz Souzaos

Luiz Souzaos

Responder

Post mais votado

25/11/2013

Alter table (NOME_DA_TABELA) Add (NOME_DA_COLUNA) tido da coluna.

Jefferson Santos

Jefferson Santos
Responder

Mais Posts

25/11/2013

Alex Lekao

Ola Luiz Boa tarde!!!

Deixa eu entender, vc precisa mesmo de uma nova coluna?

Nao seria apenas vc montar o script para o relatorio, se eh que vc esta fazendo algum relatorio ou algo do tipo, para que essa quarta coluna respeitasse essas condicionais???

A partir dai acredito que resolva o seu problema.

Mas dependendo do que vc quiser vc podera criar uma coluna com campo default e neste valor default colocar o script em questao, acredito que de certo, nao testei.

Verifique certinho a sua necessidade e poste ai para vermos o que conseguimos te ajudar.

Abraco.

Alex - Lekao
Responder

25/11/2013

Luiz Souzaos

Alex, adicionando uma coluna e colocar o script nela já me ajudaria eu consigo rodar o script mais não adiconar esse script na nova coluna.

Exemplo: criei a coluna nova RJ_MES_JANEIRO como faço pra inserir o script nela eu to usando o seguinte script

SELECT
CASE WHEN CIDADE = 'RIO DE JANEIRO' AND MÊS = 'JANEIRO' THEN Valor
ELSE 0
END as RJ_MES_JANEIRO

FROM tabela atual

Quando rodo esse script ele me retorna a coluna sozinha, como faço pra que esse resultado apareça na coluna nova que criei na tabela RJ_MES_JANEIRO


Abraço, e obrigado pela ajuda.
Responder

25/11/2013

Alex Lekao

Oi Boa tarde!!!

entao o que eu quiz dizer eh o seguinte.

essa coluna nao precisaria existir na tabela, se ele eh apenas para apresentar um valor condicional, vc nao precisa tela fisicamente, ela apareceria apenas quando os dados fossem necessarios, ou seja no uso da instrucao.

seria o seguinte:

select
   cidade, 
   valor, 
   mes,
   case when cidade = 'RIO DE JANEIRO' and mes= 'JANEIRO' then Valor else 0 end as RJ_MES_JANEIRO
from tabela_atual


desta forma vc nao precisaria ter a coluna fisicamente criada na tabela, ela passaria a ser "dinamica" e com isso nao haveria ocupacao de espaco em disco.

caso fosse necessario implementar mais alguma coisa era so ajustar o script.

nao sei se seria isso que vc queria.

mas caso vc queira a coluna fisicamente criada, se nao me engano vc poderia criar a coluna e na frente do nome da soluna vc coloca entre parenteses o case que tem no codigo acima, nao tenho certeza absoluta, pq quase nao faco isso, e nao me lembro exatamente como funciona.

Faz um testes e ve se funciona e posta ai para gente ver.

abraco.

Alex - Lekao
Responder

25/11/2013

Fabiano Carvalho

Alter table [sua tabela] add [sua_coluna] as CASE WHEN CIDADE = 'RIO DE JANEIRO' AND MÊS = 'JANEIRO' THEN Valor ELSE 0 END


Pesquise sobre coluna computada.
Responder

25/11/2013

Alex Lekao

Alter table [sua tabela] add [sua_coluna] as CASE WHEN CIDADE = 'RIO DE JANEIRO' AND MÊS = 'JANEIRO' THEN Valor ELSE 0 END


Pesquise sobre coluna computada.


Oi Fabiano, boa tarde!!!

Pelo visto eu estava com a ideia correta... rsrsr

Obrigado.

Abraco.

Alex - Lekao
Responder

25/11/2013

Fabiano Carvalho

O problema desse tipo de coluna é o desempenho, que por muitas vezes é prejudicado de forma desnecessária, no caso, toda vez que for dar um o select nela.
Responder

25/11/2013

Alex Lekao

entao deve ser mais interessante manter essa coluna apenas no script, no lugar que usar o campo calculado.

ela esta funcionando como um subselect praticamente correto? nao sei como funcionaria o algoritmo do banco neste caso. rsrsr
Responder

25/11/2013

Luiz Souzaos

Fabiano, Alex, desculpem a demora no retorno.

Obrigado pela ajuda, deu certo aqui, eu inseri uma coluna default e nessa coluna usei o script que foi passado.

Vocês falaram que esse método pode interferir no desempenho, veja se nesse meu caso isso vai ocorrer, meu cenário é o seguinte.

Tenho um ETL que está fazendo todo esse processo do script, depois de rodar todo o script essa etl importa a base pra tabela do sql já com a nova coluna.

Ainda assim teria problema de desempenho?

Abraço!! E Obrigado!
Responder

25/11/2013

Luiz Souzaos

Fabiano/Alex procurei sobre o assunto de tabela computada, vi que para ter os dados com mais performance em coluna computada devemos indexar ela e validar como PERSISTED, assim os dados ficariam armazenados e só seriam calculados novamente caso houvesse uma atualização da tabela.
Poderiam me auxiliar como indexar e validar como PERSISTED no meu caso.

Estou usando o seguinte script, como faria nesse caso pra indexar e validar como PERSISTED?


Alter Table [dbo].[Pivot_Geral] Add [YTD_MESES_BSFIN] Float


Desde já agradecido pela ajuda.

Abraço!
Responder

26/11/2013

Alex Lekao

Fabiano, Alex, desculpem a demora no retorno.

Obrigado pela ajuda, deu certo aqui, eu inseri uma coluna default e nessa coluna usei o script que foi passado.

Vocês falaram que esse método pode interferir no desempenho, veja se nesse meu caso isso vai ocorrer, meu cenário é o seguinte.

Tenho um ETL que está fazendo todo esse processo do script, depois de rodar todo o script essa etl importa a base pra tabela do sql já com a nova coluna.

Ainda assim teria problema de desempenho?

Abraço!! E Obrigado!


Oi Luiz, bom dia!!!

Entao com relacao a esse processo, acredito que vc nao precise do campo na tabela entao, pq o processo de importacao acontecera com o script e a partir do script eh que sera feito o insert na tabela correto?

com pode ser desnecessario esse novo campo ocupando mais espaco fisico.

Agora imagine em grandes volumes de dados fazendo isso, pode ser mais demorado sim.

mas acredito que mais opniao de mais gente seja melhor para elucidacao da questao.
Responder

26/11/2013

Alex Lekao

Fabiano/Alex procurei sobre o assunto de tabela computada, vi que para ter os dados com mais performance em coluna computada devemos indexar ela e validar como PERSISTED, assim os dados ficariam armazenados e só seriam calculados novamente caso houvesse uma atualização da tabela.
Poderiam me auxiliar como indexar e validar como PERSISTED no meu caso.

Estou usando o seguinte script, como faria nesse caso pra indexar e validar como PERSISTED?


Alter Table [dbo].[Pivot_Geral] Add [YTD_MESES_BSFIN] Float


Desde já agradecido pela ajuda.

Abraço!


Entao, eu nao conheco bem a esse respeito, mas dei uma pesquisada e achei os seguintes links que podem te ajudar.
[url]http://blogs.msdn.com/b/batuhanyildiz/archive/2013/03/21/which-one-is-better-persisted-column-or-xml-indexes.aspx[/url]
[url]http://luanmorenodba.wordpress.com/2011/10/18/opo-persisted-e-suas-utilizaes/[/url]
[url]http://technet.microsoft.com/pt-br/library/ms186241.aspx[/url]
[url]http://danieladeniji.wordpress.com/2013/05/08/technical-microsoft-sql-server-table-spool-causation-indexes-on-non-persisted-columns/[/url]

Bom espero que te ajude.

Abraco.

Alex - Lekao
Responder

26/11/2013

Luiz Souzaos

Alex, obrigado pela atenção, vou ler os links que você relacionou..

Muito obrigado!
Responder

26/11/2013

Alex Lekao

Disponha.

espero realmente que seja util.

Abraco.

Alex - Lekao
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar