Como filtrar apenas um valor entre muitos na ordem desejada

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
Avatar do usuário
pablo.verly
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 17
Registrado em: Qua, 01 Dez 2010 7:17 am
Localização: es
T.I Santa Casa Vitoria

Bom pessoal.
Estou tentando trazer um filtro onde traga apenhas um dos itens abaixo, mas devo esta enganado pois não esta me trazendo correto.

Selecionar tudo

and (U.tp_relatorios  = '1' OR  
         U.tp_relatorios  = '3' OR 
         U.tp_relatorios  = 'R' OR 
         U.tp_relatorios  = 'C' OR 
         U.tp_relatorios  = '2' OR 
         U.tp_relatorios  = 'E' OR 
         U.tp_relatorios  = '4') 

Exemplo:
O tipo de relatorio(tp_relatorio) tem os valores

Selecionar tudo

 ('1', '3', 'R', 'C', '2', 'E', '4')
O que eu quero é que traga 1 se tiver ou 3 se tiver ou R se tiver........ nesta ordem
gfkauer
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 389
Registrado em: Ter, 27 Jul 2010 1:34 pm
Localização: Sapiranga - RS
Contato:
Quem falou que programar era fácil??

Quanto mais dificil for a implementação mais valorizado seu trabalho será!

Acessem: www.gfkauer.com.br

Tente fazer algo assim:

Selecionar tudo

Select * From (
Select 1 cod, 'campo 1' descr From dual Union
Select 2 cod, 'campo 2' descr From dual Union
Select 2 cod, 'campo 3' descr From dual 
) tab
Where (tab.cod = 2
   Or tab.cod = 3)
 And Rownum = 1
Order By tab.cod
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

da pra fazer um mostro de where e dai você nunca mais vai entender novamente.. rsrs

porque você não explica seu problema.. talvez apareçam outras soluções

fica na paz
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Algo assim deve resolver:

Selecionar tudo

SQL> with u as (
  2  select 'R' tp_relatorios from dual union all
  3  select 'C' from dual union all
  4  select '2' from dual union all
  5  select 'E' from dual union all
  6  select '4' from dual)
  7  -- fim dos dados de exemplo
  8  select *
  9    from (select u.*,
 10                 row_number() over (order by (case when tp_relatorios = '1' then 1
 11                                                   when tp_relatorios = '3' then 2
 12                                                   when tp_relatorios = 'R' then 3
 13                                                   when tp_relatorios = 'C' then 4
 14                                                   when tp_relatorios = '2' then 5
 15                                                   when tp_relatorios = 'E' then 6
 16                                                   when tp_relatorios = '4' then 7
 17                                                   else 9999 end)) col_ordenamento
 18            from u)
 19   where col_ordenamento = 1;
 
TP_RELATORIOS COL_ORDENAMENTO
------------- ---------------
R                           1
 
SQL> 
Avatar do usuário
pablo.verly
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 17
Registrado em: Qua, 01 Dez 2010 7:17 am
Localização: es
T.I Santa Casa Vitoria

Talvez não esclarecir corretamente.

Selecionar tudo

select p.cd_produto            cd_produto,
       p.ds_produto            produto,
       p.tp_ativo              ativo,
       e.cd_multi_empresa      empresa,
       e.vl_custo_medio        custo_medio,
       e.vl_ultima_entrada     entrada,
       e.vl_tempo_de_reposicao tmp_reposicao,
       e.tp_classificacao_xyz  classificacao_xyz,
       e.tp_classificacao_abc  classificacao_abc,
       e.qt_estoque_maximo     maximo,
       e.qt_estoque_minimo     minimo,
       e.qt_ponto_de_pedido    ponto_pedido,
       e.qt_consumo_mês        consumo_mês,
       u.ds_unidade, 
       u.tp_relatorios
  from produto p, empresa_produto e, uni_pro u
 where p.cd_produto  = e.cd_produto 
   and p.cd_produto  = u.cd_produto 
   and p.sn_movimentacao = 'S'
   and p.cd_produto =  98 
     and (U.tp_relatorios  = '1' OR  
         U.tp_relatorios  = '3' OR 
         U.tp_relatorios  = 'R' OR 
         U.tp_relatorios  = 'C' OR 
         U.tp_relatorios  = '2' OR 
         U.tp_relatorios  = 'E' OR 
         U.tp_relatorios  = '4') 
            
    --and U.tp_relatorios IN ('1', '3', 'R', 'C', '2', 'E', '4')

 order by p.cd_produto
gfkauer
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 389
Registrado em: Ter, 27 Jul 2010 1:34 pm
Localização: Sapiranga - RS
Contato:
Quem falou que programar era fácil??

Quanto mais dificil for a implementação mais valorizado seu trabalho será!

Acessem: www.gfkauer.com.br

Faz isto:

Selecionar tudo

Select p.cd_produto cd_produto,
       p.ds_produto produto,
       p.tp_ativo ativo,
       e.cd_multi_empresa empresa,
       e.vl_custo_medio custo_medio,
       e.vl_ultima_entrada entrada,
       e.vl_tempo_de_reposicao tmp_reposicao,
       e.tp_classificacao_xyz classificacao_xyz,
       e.tp_classificacao_abc classificacao_abc,
       e.qt_estoque_maximo maximo,
       e.qt_estoque_minimo minimo,
       e.qt_ponto_de_pedido ponto_pedido,
       e.qt_consumo_mês consumo_mês,
       u.ds_unidade,
       u.tp_relatorios
  From produto         p,
       empresa_produto e,
       uni_pro         u
 Where Rownum = 1
   And p.cd_produto = e.cd_produto
   And p.cd_produto = u.cd_produto
   And p.sn_movimentacao = 'S'
   And p.cd_produto = 98
   And (u.tp_relatorios = '1' Or u.tp_relatorios = '3' Or u.tp_relatorios = 'R' Or
       u.tp_relatorios = 'C' Or u.tp_relatorios = '2' Or u.tp_relatorios = 'E' Or
       u.tp_relatorios = '4')
 Order By u.tp_relatorios,p.cd_produto
e me diz o resultado
Avatar do usuário
pablo.verly
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 17
Registrado em: Qua, 01 Dez 2010 7:17 am
Localização: es
T.I Santa Casa Vitoria

Perfeito!
Obrigado !
Avatar do usuário
pablo.verly
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 17
Registrado em: Qua, 01 Dez 2010 7:17 am
Localização: es
T.I Santa Casa Vitoria

Nossa quando comento o filtro unitario do produto não traz todos os produtos existentes .
Seguinte cada produto tem varias respostas tp_relatorio.
Deveria trazer todos os produtos com apenas 1 tp_relatorio.

Selecionar tudo

Select p.cd_produto cd_produto, 
       p.ds_produto produto, 
       p.tp_ativo ativo, 
       e.cd_multi_empresa empresa, 
       e.vl_custo_medio custo_medio, 
       e.vl_ultima_entrada entrada, 
       e.vl_tempo_de_reposicao tmp_reposicao, 
       e.tp_classificacao_xyz classificacao_xyz, 
       e.tp_classificacao_abc classificacao_abc, 
       e.qt_estoque_maximo maximo, 
       e.qt_estoque_minimo minimo, 
       e.qt_ponto_de_pedido ponto_pedido, 
       e.qt_consumo_mês consumo_mês, 
       u.ds_unidade, 
       u.tp_relatorios 
  From produto         p, 
       empresa_produto e, 
       uni_pro         u 
 Where Rownum = 1
   And p.cd_produto = e.cd_produto 
   And p.cd_produto = u.cd_produto 
   --And p.sn_movimentacao = 'S' 
  -- and p.sn_padronizado = 'S'
  -- And p.cd_produto = 107 
   And (u.tp_relatorios = '1' Or u.tp_relatorios = '3' Or u.tp_relatorios = 'R' Or 
       u.tp_relatorios = 'C' Or u.tp_relatorios = '2' Or u.tp_relatorios = 'E' Or 
       u.tp_relatorios = '4') 
 Order By u.tp_relatorios,p.cd_produto
gfkauer
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 389
Registrado em: Ter, 27 Jul 2010 1:34 pm
Localização: Sapiranga - RS
Contato:
Quem falou que programar era fácil??

Quanto mais dificil for a implementação mais valorizado seu trabalho será!

Acessem: www.gfkauer.com.br

Ahhhh!!!

Mas ai já é diferente, uma coisa é trazer o primeiro registro, outra é trazer todos os registros do primeiro filtro...

vou reescrever aqui e vejo como ficaria...
gfkauer
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 389
Registrado em: Ter, 27 Jul 2010 1:34 pm
Localização: Sapiranga - RS
Contato:
Quem falou que programar era fácil??

Quanto mais dificil for a implementação mais valorizado seu trabalho será!

Acessem: www.gfkauer.com.br

Putz não sei se vai solucionar mas tenta isto:

Selecionar tudo

Select p.cd_produto cd_produto,
       p.ds_produto produto,
       p.tp_ativo ativo,
       e.cd_multi_empresa empresa,
       e.vl_custo_medio custo_medio,
       e.vl_ultima_entrada entrada,
       e.vl_tempo_de_reposicao tmp_reposicao,
       e.tp_classificacao_xyz classificacao_xyz,
       e.tp_classificacao_abc classificacao_abc,
       e.qt_estoque_maximo maximo,
       e.qt_estoque_minimo minimo,
       e.qt_ponto_de_pedido ponto_pedido,
       e.qt_consumo_mês consumo_mês,
       u.ds_unidade,
       u.tp_relatorios
  From produto         p,
       empresa_produto e,
       uni_pro         u
 Where p.cd_produto = e.cd_produto
   And p.cd_produto = u.cd_produto
   And p.sn_movimentacao = 'S'
   And p.cd_produto = 98
   And u.tp_relatorios In ('1', '3', 'R', 'C', '2', 'E', '4')
   And (u.tp_relatorios = '1'
     Or (u.tp_relatorios = '3'
      And Not Exists (Select 1
                        From produto p2,
                             uni_pro u2
                       Where p.cd_produto = u.cd_produto
                         And p.sn_movimentacao = 'S'
                         And p.cd_produto = 98
                         And u.tp_relatorios = '1'))
     Or (u.tp_relatorios = 'R'
      And Not Exists (Select 1
                        From produto p2,
                             uni_pro u2
                       Where p.cd_produto = u.cd_produto
                         And p.sn_movimentacao = 'S'
                         And p.cd_produto = 98
                         And u.tp_relatorios In ('1', '3')))
     Or (u.tp_relatorios = 'C'
      And Not Exists (Select 1
                        From produto p2,
                             uni_pro u2
                       Where p.cd_produto = u.cd_produto
                         And p.sn_movimentacao = 'S'
                         And p.cd_produto = 98
                         And u.tp_relatorios In ('1', '3', 'R')))
     Or (u.tp_relatorios = '2'
      And Not Exists (Select 1
                        From produto p2,
                             uni_pro u2
                       Where p.cd_produto = u.cd_produto
                         And p.sn_movimentacao = 'S'
                         And p.cd_produto = 98
                         And u.tp_relatorios In ('1', '3', 'R', 'C')))
     Or (u.tp_relatorios = 'E'
      And Not Exists (Select 1
                        From produto p2,
                             uni_pro u2
                       Where p.cd_produto = u.cd_produto
                         And p.sn_movimentacao = 'S'
                         And p.cd_produto = 98
                         And u.tp_relatorios In ('1', '3', 'R', 'C', '2')))
     Or (u.tp_relatorios = '4'
      And Not Exists (Select 1
                        From produto p2,
                             uni_pro u2
                       Where p.cd_produto = u.cd_produto
                         And p.sn_movimentacao = 'S'
                         And p.cd_produto = 98
                         And u.tp_relatorios In ('1', '3', 'R', 'C', '2', 'E'))))
 Order By u.tp_relatorios,
          p.cd_produto
Só espero que não sejam incluidos mais filtros do tipo de relatório.
Se funcionar avisa...
Avatar do usuário
pablo.verly
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 17
Registrado em: Qua, 01 Dez 2010 7:17 am
Localização: es
T.I Santa Casa Vitoria

Rodar sim e desta vez posso comentar o produto para trazer todos .
Mas esta trazendo todos os tp_relatorio.

Selecionar tudo

cd_produto          Produto                                            tp_relatorio
98                ACIDO FOLICO 0,2MG/ML V.O GOTAS              C
98                ACIDO FOLICO 0,2MG/ML V.O GOTAS               R
98                ACIDO FOLICO 0,2MG/ML V.O GOTAS               1

já no script anterior trouxe certo so que não é apenas o produto 98.

Selecionar tudo

cd_produto          Produto                                            tp_relatorio
98                ACIDO FOLICO 0,2MG/ML V.O GOTAS               R
gfkauer
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 389
Registrado em: Ter, 27 Jul 2010 1:34 pm
Localização: Sapiranga - RS
Contato:
Quem falou que programar era fácil??

Quanto mais dificil for a implementação mais valorizado seu trabalho será!

Acessem: www.gfkauer.com.br

Deixa eu pensar aqui...
gfkauer
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 389
Registrado em: Ter, 27 Jul 2010 1:34 pm
Localização: Sapiranga - RS
Contato:
Quem falou que programar era fácil??

Quanto mais dificil for a implementação mais valorizado seu trabalho será!

Acessem: www.gfkauer.com.br

Faz um teste, comenta os filtros

Selecionar tudo

And p.sn_movimentacao = 'S'
And p.cd_produto = 98 
em todos os pontos e me apresenta o resultado...
Avatar do usuário
pablo.verly
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 17
Registrado em: Qua, 01 Dez 2010 7:17 am
Localização: es
T.I Santa Casa Vitoria

A movimentacao não posso comentar devido produtos inativos (mas comentei)

Selecionar tudo

97	ACIDO FOLICO 0,2MG/ML V.O GOTAS (MESTRE)	C
97	ACIDO FOLICO 0,2MG/ML V.O GOTAS (MESTRE)	R
98	ACIDO FOLICO 0,2MG/ML V.O GOTAS	C
98	ACIDO FOLICO 0,2MG/ML V.O GOTAS	R
98	ACIDO FOLICO 0,2MG/ML V.O GOTAS	1
99	INATIVO ACIDO FOLICO 5MG V.O (MESTRE)	R
100	INATIVO ACIDO FOLICO 5MG V.O	R
101	INATIVO ACIDO FOLINICO 15MG V.O (MESTRE)	R
102	INATIVO SULFATO FERROSO 300MG V.O (MESTRE)	R
103	INATIVO SULFATO FERROSO 300MG V.O	R
104	INATIVO BISACODIL 5MG V.O (MESTRE)	R
105	INATIVO BISACODIL 5MG V.O	R
106	SULFATO FERROSO 25MG/ML - 30ML V.O GOTAS (MESTRE)	C
106	SULFATO FERROSO 25MG/ML - 30ML V.O GOTAS (MESTRE)	R
107	SULFATO FERROSO 25MG/ML V.O GOTAS	C
107	SULFATO FERROSO 25MG/ML V.O GOTAS	R
107	SULFATO FERROSO 25MG/ML V.O GOTAS	1
108	AGULHA DESCARTAVEL 13X4,5	R
108	AGULHA DESCARTAVEL 13X4,5	1
109	INATIVO HEPARINA SODICA 25000UI/5ML - 5ML I.V (MESTRE)	R
110	INATIVO HEPARINA SODICA 25000UI/5ML - 5ML I.V	R
111	AGULHA DESCARTAVEL 25X07	R
111	AGULHA DESCARTAVEL 25X07	1
112	AGULHA DESCARTAVEL 25X08	R
resultado 7007 respostas sendo que a tabela produto existe apenas 5531
NOTA-SE que alguns produtos estao repetidos devido o tp_relatorio que deveria seguir a regua citado anteriomente.
burga
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Qui, 26 Nov 2009 1:05 pm
Localização: SP
Ricardo H. Tajiri

Roubando a idéia do Fsitja:

Selecionar tudo

with t as (
  select p.cd_produto cd_produto,
    p.ds_produto produto,
    p.tp_ativo ativo,
    e.cd_multi_empresa empresa,
    e.vl_custo_medio custo_medio,
    e.vl_ultima_entrada entrada,
    e.vl_tempo_de_reposicao tmp_reposicao,
    e.tp_classificacao_xyz classificacao_xyz,
    e.tp_classificacao_abc classificacao_abc,
    e.qt_estoque_maximo maximo,
    e.qt_estoque_minimo minimo,
    e.qt_ponto_de_pedido ponto_pedido,
    e.qt_consumo_mês consumo_mês,
    u.ds_unidade,
    u.tp_relatorios,
    row_number() over (order by (case when tp_relatorios = '1' then 1
                                      when tp_relatorios = '3' then 2
                                      when tp_relatorios = 'R' then 3
                                      when tp_relatorios = 'C' then 4
                                      when tp_relatorios = '2' then 5
                                      when tp_relatorios = 'E' then 6
                                      when tp_relatorios = '4' then 7
                                      else null end)) col_ordenamento
  from produto p, empresa_produto e, uni_pro u
  where p.cd_produto = e.cd_produto
    and p.cd_produto = u.cd_produto
    and p.sn_movimentacao = 'S'
    and p.cd_produto = 98
    and U.tp_relatorios IN ('1', '3', 'R', 'C', '2', 'E', '4'))
select * 
from t
where col_ordenamento = (select min(col_ordenamento) from t)
order by cd_produto;
gfkauer
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 389
Registrado em: Ter, 27 Jul 2010 1:34 pm
Localização: Sapiranga - RS
Contato:
Quem falou que programar era fácil??

Quanto mais dificil for a implementação mais valorizado seu trabalho será!

Acessem: www.gfkauer.com.br

dificil ein...

Selecionar tudo

Select p.cd_produto cd_produto,
       p.ds_produto produto,
       p.tp_ativo ativo,
       e.cd_multi_empresa empresa,
       e.vl_custo_medio custo_medio,
       e.vl_ultima_entrada entrada,
       e.vl_tempo_de_reposicao tmp_reposicao,
       e.tp_classificacao_xyz classificacao_xyz,
       e.tp_classificacao_abc classificacao_abc,
       e.qt_estoque_maximo maximo,
       e.qt_estoque_minimo minimo,
       e.qt_ponto_de_pedido ponto_pedido,
       e.qt_consumo_mês consumo_mês,
       u.ds_unidade,
       u.tp_relatorios
  From produto         p,
       empresa_produto e,
       uni_pro         u
 Where p.cd_produto = e.cd_produto
   And p.cd_produto = u.cd_produto
   And p.sn_movimentacao = 'S'
   And ((u.tp_relatorios = '4'
      And Not Exists (Select 1
                        From produto p2,
                             uni_pro u2
                       Where p.cd_produto = u.cd_produto
                         And p.sn_movimentacao = 'S'
                         And u.tp_relatorios In ('1', '3', 'R', 'C', '2', 'E')))
     Or (u.tp_relatorios = 'E'
      And Not Exists (Select 1
                        From produto p2,
                             uni_pro u2
                       Where p.cd_produto = u.cd_produto
                         And p.sn_movimentacao = 'S'
                         And u.tp_relatorios In ('1', '3', 'R', 'C', '2')))
     Or (u.tp_relatorios = '2'
      And Not Exists (Select 1
                        From produto p2,
                             uni_pro u2
                       Where p.cd_produto = u.cd_produto
                         And p.sn_movimentacao = 'S'
                         And u.tp_relatorios In ('1', '3', 'R', 'C')))
     Or (u.tp_relatorios = 'C'
      And Not Exists (Select 1
                        From produto p2,
                             uni_pro u2
                       Where p.cd_produto = u.cd_produto
                         And p.sn_movimentacao = 'S'
                         And u.tp_relatorios In ('1', '3', 'R')))
     Or (u.tp_relatorios = 'R'
      And Not Exists (Select 1
                        From produto p2,
                             uni_pro u2
                       Where p.cd_produto = u.cd_produto
                         And p.sn_movimentacao = 'S'
                         And u.tp_relatorios In ('1', '3')))
     Or (u.tp_relatorios = '3'
      And Not Exists (Select 1
                        From produto p2,
                             uni_pro u2
                       Where p.cd_produto = u.cd_produto
                         And p.sn_movimentacao = 'S'
                         And u.tp_relatorios = '1'))
     Or u.tp_relatorios = '1')
 Order By u.tp_relatorios,
          p.cd_produto
Espero que ajude...
Agora tenho que voltar ao trabalho :-o
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Se nenhuma das ideias for o que você quer, por favor poste dados de exemplo para sua tabela e o que você gostaria que fosse exibido pelo SQL para esse exemplo.

É muito mais simples do que a gente ficar chutando o que você gostaria de enxergar.
Avatar do usuário
pablo.verly
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 17
Registrado em: Qua, 01 Dez 2010 7:17 am
Localização: es
T.I Santa Casa Vitoria

gfkauer -
Cara não teve diferenca ficou com mesmo resultado do primeiro.

Selecionar tudo

cd_produto    produto                                              tp_relatorios
98                ACIDO FOLICO 0,2MG/ML V.O GOTAS         1
98                ACIDO FOLICO 0,2MG/ML V.O GOTAS         R
98                ACIDO FOLICO 0,2MG/ML V.O GOTAS         C
107              SULFATO FERROSO 25MG/ML V.O GOTAS     R
107              SULFATO FERROSO 25MG/ML V.O GOTAS     1
107              SULFATO FERROSO 25MG/ML V.O GOTAS     C

victorhugomuniz e outros
Tenho a table a produto com 5531 itens sendo que existe a coluna tp_relatorio podendo ser o mesmo.

Selecionar tudo

         U.tp_relatorios  = '1' OR  
         U.tp_relatorios  = '3' OR 
         U.tp_relatorios  = 'R' OR 
         U.tp_relatorios  = 'C' OR 
         U.tp_relatorios  = '2' OR 
         U.tp_relatorios  = 'E' OR 
         U.tp_relatorios  = '4'
o que eu preciso é que traga apenas um produto mesmo que tenha todos os tp_relatorio.
Ex:

Selecionar tudo

ACIDO FOLICO 0,2MG/ML V.O GOTAS   = 1
se não tive 1 traria 3 se não tive 3 traria R .
"OBS: tem segui a ordem acima"

Script referente

Selecionar tudo

select p.cd_produto            cd_produto,
       p.ds_produto            produto,
       p.tp_ativo              ativo,
       e.cd_multi_empresa      empresa,
       e.vl_custo_medio        custo_medio,
       e.vl_ultima_entrada     entrada,
       e.vl_tempo_de_reposicao tmp_reposicao,
       e.tp_classificacao_xyz  classificacao_xyz,
       e.tp_classificacao_abc  classificacao_abc,
       e.qt_estoque_maximo     maximo,
       e.qt_estoque_minimo     minimo,
       e.qt_ponto_de_pedido    ponto_pedido,
       e.qt_consumo_mês        consumo_mês,
       u.ds_unidade, 
       u.tp_relatorios

  from produto p, empresa_produto e, uni_pro u
 where p.cd_produto  = e.cd_produto 
   and p.cd_produto  = u.cd_produto 
   and p.sn_movimentacao = 'S'
     and (U.tp_relatorios  = '1' OR  
         U.tp_relatorios  = '3' OR 
         U.tp_relatorios  = 'R' OR 
         U.tp_relatorios  = 'C' OR 
         U.tp_relatorios  = '2' OR 
         U.tp_relatorios  = 'E' OR 
         U.tp_relatorios  = '4') 
  
 order by p.cd_produto
Avatar do usuário
pablo.verly
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 17
Registrado em: Qua, 01 Dez 2010 7:17 am
Localização: es
T.I Santa Casa Vitoria

Ai pessoal problema resolvido.
Tinha uma TABELA config_unidade que me ajudou bastante.

Selecionar tudo

tp_unidade       cd_ordem
E                	1
C                	2
G               	3
R               	4
1               	5
2 	                6
3                 	7
4               	8
5               	9
B 	                10

Selecionar tudo

SELECT "CODIGO_PRODUTO","CODIGO_ESTOQUE","CODIGO_LOCALIZACAO","DESCRICAO_UNIDADE","DESCRICAO_LOCALIZACAO","DESCRICAO_PRODUTO","TIPO_RELATORIO","CD_ORDEM","MENOR_ORDEM" 
  FROM (SELECT DISTINCT e.cd_produto codigo_produto 
                       ,e.cd_estoque codigo_estoque 
                       ,e.cd_localizacao codigo_localizacao 
                       ,ds_unidade descricao_unidade 
                       ,ds_localizacao descricao_localizacao 
                       ,ds_produto descricao_produto 
                       ,u.tp_relatorios tipo_relatorio 
                       ,c.cd_ordem 
                       ,MIN(c.cd_ordem) OVER(PARTITION BY e.cd_produto) menor_ordem 
          FROM dbamv.est_pro e 
              ,dbamv.uni_pro u 
              ,dbamv.localizacao l 
              ,dbamv.produto p 
              ,dbamv.estoque r 
              ,config_unidade c 
         WHERE e.cd_produto = u.cd_produto 
           AND l.cd_localizacao = e.cd_localizacao 
           AND l.cd_estoque = r.cd_estoque 
           AND e.cd_produto = p.cd_produto 
           AND u.cd_produto = p.cd_produto 
           AND c.tp_unidade = u.tp_relatorios 
              AND p.cd_produto = 98 
           AND c.cd_ordem IN ('1', '2', '3', '4', '5', '6', '7', '8', '9', '10') 
         ORDER BY e.cd_produto 
                 ,c.cd_ordem) 
 WHERE cd_ordem = menor_ordem

OBRIGADO!!
gfkauer
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 389
Registrado em: Ter, 27 Jul 2010 1:34 pm
Localização: Sapiranga - RS
Contato:
Quem falou que programar era fácil??

Quanto mais dificil for a implementação mais valorizado seu trabalho será!

Acessem: www.gfkauer.com.br

Estamos ai para isto!
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 9 visitantes