Ir para conteúdo

Arquivado

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

xoque

select mesmo campo da mesma tabela

Recommended Posts

ola tenho uma tabela chamada pcmov , nela exista 2 tipos de operaçoes

as de entrada = E , e as de saida = S . nelas existe o vlsuframa , vlsuframa so é preenchido caso a tabela for de Entrada = E

 

estou com problema no select , pois eu quero puxar apenas as saidas, e a unica coisa que eu queria da entrada , era apenas o vlsuframa.

existe alguma soluçao ?

segue abaixo o script.

SELECT

  n.NUMNOTA,
  n.DTENT,
  n.CODFORNEC,
  n.FORNECEDOR,
  (c.NUMNOTA),
  c.CODPROD,
  p.DESCRICAO,
  c.DTMOV,
  c.CODOPER,
  c.QT,
  c.ptabela,
  c.VLDESCONTO,
  c.vlsuframa,
  p.PERICM,
  c.numregiao,
  trunc(c.QT * (c.PTABELA - c.VLDESCONTO), 2) AS total,
  trunc((c.QT * (c.Ptabela -c.vldesconto)) * p.PERICM / 100, 2) AS imposto
FROM
  pcmov c, pcest e, pcnfent n, pcprodut p, pctabtrib t
WHERE
  e.NUMTRANSENTULTENT = n.NUMTRANSENT(+)
  AND c.CODPROD = p.CODPROD
  AND e.CODPROD = c.CODPROD
  AND c.CODPROD = t.CODPROD
  AND n.especie='NF'
  AND c.CODFILIAL = e.CODFILIAL
  AND (c.DTMOV BETWEEN :dtinicial AND :dtfinal
  AND c.CODFILIAL = 1
  and c.numregiao = 1                                         
  AND c.CODOPER in ('S')
  AND c.DTCANCEL IS NULL)
GROUP BY
  n.NUMNOTA, n.DTENT, n.CODFORNEC, n.FORNECEDOR, (c.NUMNOTA), c.CODPROD, p.DESCRICAO, c.QT, c.DTMOV, c.CUSTOULTENT,
  p.PERCALIQEXT, p.PERCIVA, p.PERCALIQINT, p.PERICM, c.PTABELA, c.VLDESCONTO, codoper, c.VLDESCONTO, c.vlsuframa, p.PERICM, c.numregiao
ORDER BY
  n.DTENT,
  n.NUMNOTA,
  n.FORNECEDOR,
  c.CODPROD

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existe algum "relacionamento" entre os registros de entrada e saída ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha a unica coisa em comum entrada e saida e o codprod .

 

o problema q todos os registro de entrada e saida fica na mesma tabela pcmov.

a diferença entre eles e apenas o codigo de operaçao.

Compartilhar este post


Link para o post
Compartilhar em outros sites

3 soluções me ocorrem.

 

1) Montar duas sqls , uma para entrada e outra para saída , trata-las como tabelas virtuais e montar um join

 

2) Montar a coluna da entrada como um subselect

 

30 fazer uma function que retorne a coluna em questão

Compartilhar este post


Link para o post
Compartilhar em outros sites

o meu select de entada e esse

 


SELECT
  n.NUMNOTA,
  n.DTENT,
  n.CODFORNEC,
  n.FORNECEDOR,
  c.CODPROD,
  p.DESCRICAO,
  c.QT,
  c.DTMOV,
  c.ptabela,
  c.vlsuframa,
  c.codoper,
  p.PERICM


FROM
  pcmov c, pcest e, pcnfent n, pcprodut p, pctabtrib t
WHERE
  e.NUMTRANSENTULTENT = n.NUMTRANSENT(+)
  AND c.CODPROD = p.CODPROD
  AND e.CODPROD = c.CODPROD
  AND c.CODPROD = t.CODPROD
  AND n.especie='NF'
  AND c.CODFILIAL = e.CODFILIAL
  AND (c.DTMOV BETWEEN :dtinicial AND :dtfinal
  AND c.CODOPER = 'E'
  AND c.DTCANCEL IS NULL)
  and c.qt > 0
GROUP BY
  n.NUMNOTA, n.DTENT, n.CODFORNEC, n.FORNECEDOR, c.CODPROD, p.DESCRICAO, c.QT, c.DTMOV, c.CUSTOULTENT,
  p.PERCALIQEXT, p.PERCIVA, p.PERCALIQINT, p.PERICM, P.PERCCREDICMPRESUMIDO, c.ptabela, c.vlsuframa, c.codoper, p.PERICM
ORDER BY
  n.DTENT,
  n.NUMNOTA,
  n.FORNECEDOR,
  c.CODPROD

resultado_da_entrada.png
eu quero pegar o vlsuframa, ptabela, dessa entrada e jogar na sql de saida.

 

 

 

Esse SQL de SAIDA

SELECT
  n.NUMNOTA,
  n.DTENT,
  n.CODFORNEC,
  n.FORNECEDOR,
  c.numnota,
  c.CODPROD,
  p.DESCRICAO,
  c.QT,
  c.DTMOV,
  c.ptabela,
  c.vlsuframa,
  c.codoper,
  p.PERICM


FROM
  pcmov c, pcest e, pcnfent n, pcprodut p, pctabtrib t
WHERE
  e.NUMTRANSENTULTENT = n.NUMTRANSENT(+)
  AND c.CODPROD = p.CODPROD
  AND e.CODPROD = c.CODPROD
  AND c.CODPROD = t.CODPROD
  AND n.especie='NF'
  AND c.CODFILIAL = e.CODFILIAL
  AND (c.DTMOV BETWEEN :dtinicial AND :dtfinal
  AND c.CODOPER = 'S'
  and c.numregiao = 1
  AND c.SITTRIBUT = 41
  AND c.DTCANCEL IS NULL)
  and c.qt > 0
GROUP BY                                                                        
  n.NUMNOTA, n.DTENT, n.CODFORNEC, n.FORNECEDOR, c.CODPROD, p.DESCRICAO, c.QT, c.DTMOV, c.CUSTOULTENT,
  p.PERCALIQEXT, p.PERCIVA, p.PERCALIQINT, p.PERICM, P.PERCCREDICMPRESUMIDO, c.ptabela, c.vlsuframa, c.codoper, p.PERICM, c.numnota
ORDER BY
  n.DTENT,
  n.NUMNOTA,
  n.FORNECEDOR,
  c.CODPROD

resultado_da_Saida.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cada uma destes selects seria uma "tabela virtual" , a questão seria fazer o join (se é que possível).

Compartilhar este post


Link para o post
Compartilhar em outros sites

fiz um join dessa forma abaixo , o problema q ele ta trazendo muita informação que não devia, as que eu preciso ele traz e junta certo, algum jeito de eliminar as outras indevidas, ja tentei algumas , porem sem sucesso??

 

 

select distinct
e_exportacao.NUMNOTA as NotaEnt,
e_exportacao.DTENT,
e_exportacao.CODFORNEC,
e_exportacao.FORNECEDOR,
s_exportacao.NUMNOTASA as NotaSai,
s_exportacao.CODPROD,
s_exportacao.DESCRICAO,
s_exportacao.DTMOV,
e_exportacao.PERCSUFRAMA,
e_exportacao.PTABELA
from s_exportacao
inner join e_exportacao on s_exportacao.CODPROD = e_exportacao.CODPROD
inner join e_exportacao on s_exportacao.DESCRICAO = e_exportacao.DESCRICAO
where
s_exportacao.DTMOV BETWEEN :dtinicial AND :dtfinal

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pq 2x join na tabela !?

isso foi apenas um teste , mas de qalq forma apennas comparando as tabela de codprod, o resultado e alem da conta

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok , mas :

 

 

1) s_exportacao e e_exportacao são views ?!

 

2) em tese qual seria a chave e a cardinalidade destas tabelas virtuais ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

resolvi meu problema com esse select,

precisei fazer umas modificações na view de e_exportacao com os filtros correto, agradeço pelas dicas.

select distinct
   e_exportacao.NUMNOTA,
   s_exportacao.DTENT,
   s_exportacao.CODFORNEC,
   s_exportacao.FORNECEDOR,
   s_exportacao.NUMNOTASA NotaSai,
   s_exportacao.CODPROD,
   s_exportacao.DESCRICAO,
   s_exportacao.QT,
   s_exportacao.CODOPER,
   s_exportacao.DTMOV,
   e_exportacao.PTABELA,
   e_exportacao.VLDESCONTO,
   e_exportacao.PERCSUFRAMA,
   e_exportacao.PERCICM,
   trunc(s_exportacao.qt * ( e_exportacao.PTABELA - e_exportacao.VLDESCONTO ), 2) AS total ,
   trunc(e_exportacao.percsuframa * ( s_exportacao.QT * e_exportacao.PTABELA )/100, 2) AS ImpostoSuF
  from s_exportacao
  inner join e_exportacao on s_exportacao.CODPROD = e_exportacao.CODPROD
  where
  e_exportacao.NUMNOTA = s_exportacao.NUMNOTA 
  and s_exportacao.DTMOV BETWEEN :dtinicial AND :dtfinal
  and s_exportacao.CODOPER = 'S'
  order by
  DTENT,
  NUMNOTA,
  FORNECEDOR,
  CODPROD,
  dtmov

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.