Array
(
)

NULL SQL SERVER 2008

Paulo Henrique
   - 11 dez 2013

Boa tarde!
Tive como objetivo unir a coluna de quantidade de 10 tabelas em uma unica base, pois cada uma das 10 tabelas são referente a quantidade de transações feitas no mês.
Montei a base que apos executar os codigos ela fica na seguinte estrutura:
COD_EMP COD_LOJA QTD_JAN_13 QTD_FEV_13 QTD_MAR_13
200 3 500 520 600
200 4 NULL 200 250
200 5 NULL NULL 200
210 10 100 100 100

( obs: esses numeros são apenas um exemplo, e os mêses vão até o fim de 2013)
Até ai tudo bem, deu tudo certo.
A segunda etapa é desenvolver uma outra tabela onde a estrutura deverá ser a seguinte:
COD_EMP COD_LOJA MÊS1 MÊS2 MÊS3
200 3 500 520 600
200 4 200 250 N
200 5 200 N N
210 10 100 100 100

Reparem q o valor da loja 4 na coluna mês 1 substituiu o NULL da primeira tabela, ou melhor dizendo "ANDOU UMA CASA'',
e na coluna do mês 2 a ação se repente com o 250.
(obs: o N é uma variavel somente para referir-se aos meses seguintes)
E ai é que esta o problema, pois não sei com fazer isso no SQL.
Se alguém souber como resolver essa situação.

Alex Lekao
   - 11 dez 2013

Oi Paulo Henrique, boa tarde!!!

Me desculpe mas nao entendi muito bem o que esta acontecendo.

mas vamos la, no sql Server tem a funcao isnull(campo,valor_substiuir_null) com ela vc coloca o campo na primeira opcao e na segunda o que deve ser substituido qdo for null, zero, ou palavras e por ai vai.

pelo que percebi no que estava comentando nas primeiras opcoes, dependendo de como esta querendo fazer nao seria necessario criar novas tabelas para apresentar os dados na estrutura que vc quer, vc pode usar o pivot, que ele tranforma as linhas em colunas.

nao sei se era exatamente isso que estava querendo, mas tudo bem, se nao for vamos vendo o que conseguimos nos entender e nos ajudando.

Abraco.

Alex - Lekao

Jefferson Santos
   - 11 dez 2013

Amigo aparentemente seu código está com order by.
Se essa sua tabela for para relatório, porque não criar uma view da primeira tabela
e retirar dela o que precisa.

Isaac Jose
   - 11 dez 2013


Citação:
Oi Paulo Henrique, boa tarde!!!

Me desculpe mas nao entendi muito bem o que esta acontecendo.

mas vamos la, no sql Server tem a funcao isnull(campo,valor_substiuir_null) com ela vc coloca o campo na primeira opcao e na segunda o que deve ser substituido qdo for null, zero, ou palavras e por ai vai.

pelo que percebi no que estava comentando nas primeiras opcoes, dependendo de como esta querendo fazer nao seria necessario criar novas tabelas para apresentar os dados na estrutura que vc quer, vc pode usar o pivot, que ele tranforma as linhas em colunas.

nao sei se era exatamente isso que estava querendo, mas tudo bem, se nao for vamos vendo o que conseguimos nos entender e nos ajudando.

Abraco.

Alex - Lekao


tambem nao entendi direto...

mais se for para compor uma tabela apartir de n tabela...
eu acho melhor criar uma tabela com os dados que eu quero e aplicar os updates e se tiver campo nulo atribui 0 assim deve funcionar..

Alex Lekao
   - 11 dez 2013

acredito que solucoes existirao algumas ne??? rsrsr

desde mudar o default do campo ate views, tabelas, e por ai vai ne??

Paulo Henrique
   - 12 dez 2013

Bom, vou tentar reformular a pergunta.

Meu superior me deu duas tarefas. A 1° é a seguinte: Todo mês geramos a QUANTIDADE DE TRANSAÇÕES FEITAS POR LOJA , sendo assim no ano vigente (2013) temos 12 tabelas. Ok?
Essa primeira tarefa se resume em juntar essas 12 tabelas em uma única base, ou seja, em 1 tabela.
Graças ao INNER JOIN, UPDATE e o DISTINCT, consegui fazer essa primeira parte sem que as lojas se repetissem, com os valores da quantidades correspondentes as lojas, o mês que ela transacionou ou não, e o total batendo com cada mês certinho.
Abaixo esta a um exemplo de como a table ficou:
Cod_emp Cod_loja Qtd_jan_13 Qtd_fev_13 Qtd_mar_13 Qtd_abr_13
200 2 500 600 650 300
200 4 Null 500 600 100
200 10 Null Null 700 600
500 123 Null Null Null 200

( e assim por diante até Dez/13)

A segunda tarefa é seguinte: Tenho que criar uma outra tabela, com a visão das quantidades de transações , mas não referente ao mês em questão, e sim ao PRIMEIRO mês que aquela loja iniciou as transações. Uma outra forma de explicar é a seguinte: o NULL que vocês estão vendo ali, por exemplo, Cod_emp 200, Cod_loja 4, Qtd_jan_13 NULL, não quer dizer que a loja não transacionou em JAN/13, mas sim que lá ainda não foi inaugurada. Como podem ver no mês seguinte, FEV/13, ela realizou 500 transações, ou seja, deu inicio a suas atividades.
Bom, voltando ao dilema. Essa segunda tabela deverá ter esse formato:
Cod_emp Cod_loja Mês_1_trans. Mês_2_trans. Mês_3_trans. Mês_4_trans.
200 2 500 600 650 300
200 4 500 600 100 N
200 10 700 600 N N
500 123 200 N N N
( obs: N refere-se a quantidade de transações do mês seguinte, ou seja, o N é um numero aleatório)

Se vocês observarem, é como se tivesse “andado uma casa pra frente” . No Excel é mais simples, como se eliminássemos o NULL e deslocássemos as células para esquerda, mas isso foi uma comparação. Tentei ser mais claro, se entenderem eu fico grato por tentarem ajudar. E me perdoem pela ignorância de conseguir alinhar as linhas da tabela.

Alex Lekao
   - 12 dez 2013

Bom dia Paulo,

Vamos la, caso vc queira organizar melhor o que esta escrevendo vc pode usar os botoes abaixo da postagem, code para quando for postar os codigos que vc fez, quote para deixar destacado como uma citacao e url para que a url aparece com link dela, no caso direcionando para o site e tal, e img a mesma coisa so que para se visualizar a imgem que vc precisa, digo isto presupondo que talvez nao saiba usar, caso saiba desconsidere.

Com relacao aos dados que esta usando, o que quisemos dizer eh que para a montagem dos anos e tal, nao seria necessario por exemplo uma nova tabela, isso ocupa espaco em disco e pode acabar prejudicando desempenho e tal, o que queriamos dizer eh que vc poderia usar uma view, no caso, uma visao do que vc precisa, a view normalmente eh um script, codigo SQL que traz os dados que vc precisa, sendo assim sempre que precisar recuperar os dados basta dar um select na view e nao tuuudo de novo, e sendo assim em alguns casos nao eh necessario criar a tabela pq a view ja te da esse resultado e o espaco que ocupa eh menor que de uma tabela.

mas nao vejo problemas tbm em ter a tabela como criou, por inumeras necessidade vcs podem ter optado por isso, e isso eh uma questao de projeto e analise de modelagem, se optaram por isso, blz, entendo que isso ja foi feito.

agora vamos la, para se nao apresentar null e apresentar zero por exemplo vc coloca da seguinte forma:

#Código

select
   Cod_emp,
   Cod_loja,
   isnull(Mês_1_trans,0) as mes_1_transacoes,
   isnull(Mês_2_trans,0) as mes_2_transacoes,
   isnull(Mês_3_trans,0) as mes_3_transacoes,
   isnull(N,0) as mes_N_transacoes
From qtd_trans_loja


Desta forma onde esta com NULL ira aprecer com zero, pensando que o problema seja apenas o null.

Agora se os resultados estiverem realmente deslocados como vc informou apos colocar o isnull, pode ser problema no codigo, poste o codigo que de repente conseguimos de ajudar melhor.

Espero ter ajudado.

Abraco.

Alex - Lekao