Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

jaguar

Case

Recommended Posts

Bom dia galera td bem?
um ex funcionario fez uma query mas fez uma view, eu tentei pegar essa view de volta, mas ela vem com algumas codificações,
tentei remontar novamente, mas está dando erros de syntaxe, eu nao entendo de programação em BD, será que alguem poderia remodelar ela pra mim novamente?

Obrigado

select x0.cod_empresa ,
x0.num_nf ,
x0.num_sequencia ,
x0.dat_emis_nf ,
x0.cod_fornecedor ,
x1.raz_social ,
x0.cod_item ,
x0.den_item ,
x0.qtd_tot_remessa,
x0.dat_emis_nf
from item_em_terc x0 ,fornecedor x1
where x0.cod_fornecedor = x1.cod_fornecedor   
union all select x2.cod_empresa ,x2.num_nf_remessa ,x2.num_sequencia_nf ,
x5.dat_emis_nf ,x2.cod_fornecedor ,x3.raz_social ,x5.cod_item ,x5.den_item
CASE WHEN x4.cod_operacao = '5.903'   
THEN 0  
ELSE x2.qtd_devolvida  
END, x2.num_nf
CASE WHEN x4.cod_operacao = '5.903'   
THEN x2.qtd_devolvida  
ELSE 0  
END, x2.dat_emis_nf
from item_ret_terc x2 ,fornecedor x3 ,.nf_sup x4 ,item_em_terc x5
where x2.cod_fornecedor = x3.cod_fornecedor  
AND x2.cod_empresa = x4.cod_empresa  
AND x2.num_nf =x4.num_nf  
AND x2.ser_nf = x4.ser_nf
AND x2.ssr_nf = x4.ssr_nf  
AND x2.ies_especie_nf = x4.ies_especie_nf
AND x2.cod_fornecedor = x4.cod_fornecedor  
AND x2.dat_emis_nf =x4.dat_emis_nf
AND x2.cod_empresa = x5.cod_empresa  
AND x2.num_nf_remessa = x5.num_nf
AND x2.num_sequencia_nf = x5.num_sequencia

Compartilhar este post


Link para o post
Compartilhar em outros sites

jaguar, qdo vc diz "ela vem com algumas codificações", o que seria???

Já rodou esta sintaxe sem o UNION?

Existe uma regra fixada no CASE, tu conhece ela?

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas está dando erros de syntaxe

 

quais ?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá galera obrigado pelo retorno,

quando dou um sysview elas vem toda zuada xeio de aspas e parenteses,

rodei sem o union e nao funcionou

Existe uma regra fixada no CASE, tu conhece ela?

nao faço ideia, sou novo aqui e nao tive tempo de aprender quase nada

 

Motta a unica coisa que fala é

A syntax error has occurred.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta assim , parece que faltou uma vírgula

 

 

 

select x0.cod_empresa ,
x0.num_nf ,
x0.num_sequencia ,
x0.dat_emis_nf ,
x0.cod_fornecedor ,
x1.raz_social ,
x0.cod_item ,
x0.den_item ,
x0.qtd_tot_remessa,
x0.dat_emis_nf
from item_em_terc x0 ,fornecedor x1
where x0.cod_fornecedor = x1.cod_fornecedor   
union all
select x2.cod_empresa ,x2.num_nf_remessa ,x2.num_sequencia_nf ,
x5.dat_emis_nf ,x2.cod_fornecedor ,x3.raz_social ,x5.cod_item ,x5.den_item ,  
CASE WHEN x4.cod_operacao = '5.903'   
THEN 0  
ELSE x2.qtd_devolvida  
END, x2.num_nf
CASE WHEN x4.cod_operacao = '5.903'   
THEN x2.qtd_devolvida  
ELSE 0  
END, x2.dat_emis_nf
from item_ret_terc x2 ,fornecedor x3 ,.nf_sup x4 ,item_em_terc x5
where x2.cod_fornecedor = x3.cod_fornecedor  
AND x2.cod_empresa = x4.cod_empresa  
AND x2.num_nf =x4.num_nf  
AND x2.ser_nf = x4.ser_nf
AND x2.ssr_nf = x4.ssr_nf  
AND x2.ies_especie_nf = x4.ies_especie_nf
AND x2.cod_fornecedor = x4.cod_fornecedor  
AND x2.dat_emis_nf =x4.dat_emis_nf
AND x2.cod_empresa = x5.cod_empresa  
AND x2.num_nf_remessa = x5.num_nf
AND x2.num_sequencia_nf = x5.num_sequencia

 


Compartilhar este post


Link para o post
Compartilhar em outros sites

Qdo vc puxa pela sysview, ela vem assim msm.

Muda o MMS para o modo de resultado TEXTO e ela vai vir certinha.

 

Agora seu UNION, além de estar faltando a virgula que o Motta postou (antes de cada case), esta faltando campos.

Note que no primeiro select vc tem 10 campos e no select debaixo, vc tem 12 campos! Vai dar erro novamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A.Jr boa tarde,

no caso eu estou usando informix,

vc sabe um jeito de fazer isso que você falou?

 

Obrigado



olha quando puxo da sysview ele vem assim

 

 

'create view "informix".bi_vw_movto_terceiros (cod_empresa,num_nf'
'_rem,num_seq,dat_emis_nf,cod_fornecedor,raz_social,cod_item,den_'
'item,qtd_tot_remessa,qtd_tot_recebida,num_nf_ret,qtd_quebra,dat_'
'retorno) as select x0.cod_empresa ,x0.num_nf ,x0.num_sequencia ,'
'x0.dat_emis_nf ,x0.cod_fornecedor ,x1.raz_social ,x0.cod_item ,x'
'0.den_item ,x0.qtd_tot_remessa ,0 ,0 ,0 ,x0.dat_emis_nf from "in'
'formix".item_em_terc x0 ,"logo".fornecedor x1 where (x0.cod_forn'
'ecedor = x1.cod_fornecedor )  union all select x2.cod_empresa ,x'
'2.num_nf_remessa ,x2.num_sequencia_nf ,x5.dat_emis_nf ,x2.cod_fo'
'rnecedor ,x3.raz_social ,x5.cod_item ,x5.den_item ,0 ,CASE WHEN'
'(x4.cod_operacao = ''5.903'' )  THEN 0  ELSE x2.qtd_devolvida  END'
' ,x2.num_nf ,CASE WHEN (x4.cod_operacao = ''5.903'' )  THEN x2.qtd'
'_devolvida  ELSE 0  END ,x2.dat_emis_nf from "informix".item_ret'
'_terc x2 ,"logo".fornecedor x3 ,"logo".nf_sup x4 ,"informix".ite'
'm_em_terc x5 where (((((((((((x2.cod_fornecedor = x3.cod_fornece'
'dor ) AND (x2.cod_empresa = x4.cod_empresa ) ) AND (x2.num_nf ='
'x4.num_nf ) ) AND (x2.ser_nf = x4.ser_nf ) ) AND (x2.ssr_nf = x4'
'.ssr_nf ) ) AND (x2.ies_especie_nf = x4.ies_especie_nf ) ) AND ('
'x2.cod_fornecedor = x4.cod_fornecedor ) ) AND (x2.dat_emis_nf ='
'x4.dat_emis_nf ) ) AND (x2.cod_empresa = x5.cod_empresa ) ) AND'
'(x2.num_nf_remessa = x5.num_nf ) ) AND (x2.num_sequencia_nf = x5'
'.num_sequencia ) ) ;'

 

puxa ficaria mt agradecido se alguem conseguisse transformar isso em select pra mim :/



bom tentei aqui de novo, mas parece que parou de dar erro de sintax, mas está dando

 

'Must have the same number of selected columns in each UNION element.'

 

acho que foi o que vc falou Jr. mais como eu arrumo esse erro?

 

select x0.cod_empresa ,x0.num_nf ,x0.num_sequencia ,x0.dat_emis_nf ,x0.cod_fornecedor ,x1.raz_social ,x0.cod_item ,x0.den_item ,x0.qtd_tot_remessa ,x0.dat_emis_nf from item_em_terc x0 ,fornecedor x1 where (x0.cod_fornecedor = x1.cod_fornecedor )  union all select x2.cod_empresa ,x2.num_nf_remessa ,x2.num_sequencia_nf ,x5.dat_emis_nf ,x2.cod_fornecedor ,x3.raz_social ,x5.cod_item ,x5.den_item ,CASE WHEN(x4.cod_operacao = '5.903' )  THEN 0  ELSE x2.qtd_devolvida  END, x2.num_nf ,CASE WHEN (x4.cod_operacao = '5.903' )  THEN x2.qtd_devolvida  ELSE 0  END, x2.dat_emis_nf from item_ret_terc x2 ,fornecedor x3 ,nf_sup x4 ,item_em_terc x5 where (((((((((((x2.cod_fornecedor = x3.cod_fornecedor ) AND (x2.cod_empresa = x4.cod_empresa ) ) AND (x2.num_nf =x4.num_nf ) ) AND (x2.ser_nf = x4.ser_nf ) ) AND (x2.ssr_nf = x4.ssr_nf ) ) AND (x2.ies_especie_nf = x4.ies_especie_nf ) ) AND (x2.cod_fornecedor = x4.cod_fornecedor ) ) AND (x2.dat_emis_nf =x4.dat_emis_nf ) ) AND (x2.cod_empresa = x5.cod_empresa ) ) AND (x2.num_nf_remessa = x5.num_nf ) ) AND (x2.num_sequencia_nf = x5.num_sequencia ) )


se eu retiro o union volta o erro de syntax :S

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ajustando as colunas

 

 

select x0.cod_empresa ,
x0.num_nf ,
x0.num_sequencia ,
x0.dat_emis_nf ,
x0.cod_fornecedor ,
x1.raz_social ,
x0.cod_item ,
x0.den_item ,
x0.qtd_tot_remessa,
x0.dat_emis_nf
from item_em_terc x0 ,fornecedor x1
where x0.cod_fornecedor = x1.cod_fornecedor   
union all
select x2.cod_empresa ,
x2.num_nf_remessa ,
x2.num_sequencia_nf ,
x5.dat_emis_nf ,
x2.cod_fornecedor ,
x3.raz_social ,
x5.cod_item ,
x5.den_item ,  
CASE WHEN x4.cod_operacao = '5.903'   
THEN 0  
ELSE x2.qtd_devolvida  
END,       
CASE WHEN x4.cod_operacao = '5.903'   
THEN x2.qtd_devolvida  
ELSE 0  
END
from item_ret_terc x2 ,fornecedor x3 ,.nf_sup x4 ,item_em_terc x5
where x2.cod_fornecedor = x3.cod_fornecedor  
AND x2.cod_empresa = x4.cod_empresa  
AND x2.num_nf =x4.num_nf  
AND x2.ser_nf = x4.ser_nf
AND x2.ssr_nf = x4.ssr_nf  
AND x2.ies_especie_nf = x4.ies_especie_nf
AND x2.cod_fornecedor = x4.cod_fornecedor  
AND x2.dat_emis_nf =x4.dat_emis_nf
AND x2.cod_empresa = x5.cod_empresa  
AND x2.num_nf_remessa = x5.num_nf
AND x2.num_sequencia_nf = x5.num_sequencia

mas precisa ver se é isto mesmo.


Compartilhar este post


Link para o post
Compartilhar em outros sites

De acordo com a sysview, fica assim?

  select x0.cod_empresa ,x0.num_nf ,x0.num_sequencia ,x0.dat_emis_nf ,x0.cod_fornecedor ,x1.raz_social ,x0.cod_item ,x0.den_item ,x0.qtd_tot_remessa ,0 ,0 ,0 ,x0.dat_emis_nf from "informix".item_em_terc x0 ,"logo".fornecedor x1 where (x0.cod_fornecedor = x1.cod_fornecedor )  union all select x2.cod_empresa ,x2.num_nf_remessa ,x2.num_sequencia_nf ,x5.dat_emis_nf ,x2.cod_fornecedor ,x3.raz_social ,x5.cod_item ,x5.den_item ,0 ,CASE WHEN (x4.cod_operacao = '5.903')  THEN 0  ELSE x2.qtd_devolvida  END,x2.num_nf ,CASE WHEN (x4.cod_operacao = '5.903' )  THEN x2.qtd_devolvida  ELSE 0  END ,x2.dat_emis_nf from "informix".item_ret_terc x2 ,"logo".fornecedor x3 ,"logo".nf_sup x4 ,"informix".item_em_terc x5 where (((((((((((x2.cod_fornecedor = x3.cod_fornecedor ) AND (x2.cod_empresa = x4.cod_empresa ) ) AND (x2.num_nf =x4.num_nf ) ) AND (x2.ser_nf = x4.ser_nf ) ) AND (x2.ssr_nf = x4.ssr_nf ) ) AND (x2.ies_especie_nf = x4.ies_especie_nf ) ) AND (x2.cod_fornecedor = x4.cod_fornecedor ) ) AND (x2.dat_emis_nf =x4.dat_emis_nf ) ) AND (x2.cod_empresa = x5.cod_empresa ) ) AND(x2.num_nf_remessa = x5.num_nf ) ) AND (x2.num_sequencia_nf = x5.num_sequencia ) ) ;
Veja se roda
[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

ix cara rodou, mas tenho outra duvida,

esses case then são contas?

pq tem campo que era um valor e ao fazer outra view ele nao traz mais valor..

se for tem como eu descobrir como e aonde foi feita essa conta?

 

Obrigado

 

 

select x0.cod_empresa ,
x0.num_nf ,
x0.num_sequencia ,
x0.dat_emis_nf ,
x0.cod_fornecedor ,
x1.raz_social ,
x0.cod_item ,
x0.den_item ,
x0.qtd_tot_remessa ,
0 ,
0 ,
0 ,
x0.dat_emis_nf
from item_em_terc x0 ,
fornecedor x1
where (x0.cod_fornecedor = x1.cod_fornecedor )  
AND (x0.dat_emis_nf >= '01012013')
union all select x2.cod_empresa ,x2.num_nf_remessa ,x2.num_sequencia_nf ,x5.dat_emis_nf ,x2.cod_fornecedor ,x3.raz_social ,x5.cod_item ,x5.den_item ,0 ,
CASE WHEN (x4.cod_operacao = '5.903' )  
THEN 0  
ELSE x2.qtd_devolvida  
END, x2.num_nf ,
CASE
WHEN (x4.cod_operacao = '5.903' )  
THEN x2.qtd_devolvida  
ELSE 0
END ,x2.dat_emis_nf
from item_ret_terc x2 ,fornecedor x3 ,nf_sup x4 ,item_em_terc x5, aviso_rec x6
where (((((((((((((((x2.cod_fornecedor = x3.cod_fornecedor )
AND (x2.cod_empresa = x4.cod_empresa ) )
AND (x2.num_nf =x4.num_nf ) )
AND (x2.ser_nf = x4.ser_nf ) )
AND (x2.ssr_nf = x4.ssr_nf ) )
AND (x2.ies_especie_nf = x4.ies_especie_nf ) )
AND (x2.cod_fornecedor = x4.cod_fornecedor ) )
AND (x2.dat_emis_nf =x4.dat_emis_nf ) )
AND (x2.cod_empresa = x5.cod_empresa ) )
AND (x2.num_nf_remessa = x5.num_nf ) )
AND (x2.num_sequencia_nf = x5.num_sequencia ) )
AND (x6.num_aviso_rec = x4.num_aviso_rec) )
AND (x6.cod_empresa = x2.cod_empresa) )
AND (x6.cod_item = '0') )
AND (x6.cod_cla_fisc = '1903') )

Compartilhar este post


Link para o post
Compartilhar em outros sites

Case é um tratamento

 

CASE WHEN (x4.cod_operacao = '5.903' )   THEN 0   ELSE x2.qtd_devolvida   END

 

Se a operação for 5903 o valor é zero, senão o valor da qtd devolvida

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.