Adicionar nova coluna com dados em uma tabela existente
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.
(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
Curtidas 1
Melhor post
Jefferson Santos
25/11/2013
Alter table (NOME_DA_TABELA) Add (NOME_DA_COLUNA) tido da coluna.
GOSTEI 6
Mais Respostas
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
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
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.
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
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:
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
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
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
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
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
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
ela esta funcionando como um subselect praticamente correto? nao sei como funcionaria o algoritmo do banco neste caso. rsrsr
GOSTEI 0
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!
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
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!
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
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!
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
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!
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
25/11/2013
Alex, obrigado pela atenção, vou ler os links que você relacionou..
Muito obrigado!
Muito obrigado!
GOSTEI 0
Alex Lekao
25/11/2013
Disponha.
espero realmente que seja util.
Abraco.
Alex - Lekao
espero realmente que seja util.
Abraco.
Alex - Lekao
GOSTEI 0