Adicionar nova coluna com dados em uma tabela existente

SQL Server

25/11/2013

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

Curtidas 1

Melhor post

Jefferson Santos

Jefferson Santos

25/11/2013

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

Mais Respostas

Alex Lekao

Alex Lekao

25/11/2013

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
GOSTEI 0
Luiz Souzaos

Luiz Souzaos

25/11/2013

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.
GOSTEI 0
Alex Lekao

Alex Lekao

25/11/2013

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
GOSTEI 0
Fabiano Carvalho

Fabiano Carvalho

25/11/2013

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.
GOSTEI 0
Alex Lekao

Alex Lekao

25/11/2013

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
GOSTEI 0
Fabiano Carvalho

Fabiano Carvalho

25/11/2013

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.
GOSTEI 0
Alex Lekao

Alex Lekao

25/11/2013

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
GOSTEI 0
Luiz Souzaos

Luiz Souzaos

25/11/2013

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!
GOSTEI 0
Luiz Souzaos

Luiz Souzaos

25/11/2013

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!
GOSTEI 0
Alex Lekao

Alex Lekao

25/11/2013

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.
GOSTEI 0
Alex Lekao

Alex Lekao

25/11/2013

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
GOSTEI 0
Luiz Souzaos

Luiz Souzaos

25/11/2013

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

Muito obrigado!
GOSTEI 0
Alex Lekao

Alex Lekao

25/11/2013

Disponha.

espero realmente que seja util.

Abraco.

Alex - Lekao
GOSTEI 0
POSTAR