Bom dia pessoal!
Tenho o seguinte código PL:
select t.* from mgadm.est_itenslistamateriais t
inner join mgadm.est_produtos b
On (b.pro_tab_in_codigo = t.com_tab_in_codigo
and b.pro_pad_in_codigo = t.com_pad_in_codigo
and b.pro_in_codigo = t.com_in_codigo)
And t.lis_in_revisao = (Select Max(d.lis_in_revisao) From mgadm.est_revisaolistamateriais d
Where d.pro_tab_in_codigo = t.pro_tab_in_codigo
And d.pro_pad_in_codigo = t.pro_pad_in_codigo
And d.pro_in_codigo = t.pro_in_codigo )
where b.pro_st_alternativo = '0001184'
Union
select t.* from mgadm.est_itenslistamateriais t
inner join mgadm.est_produtos b
On (b.pro_tab_in_codigo = t.com_tab_in_codigo
and b.pro_pad_in_codigo = t.com_pad_in_codigo
and b.pro_in_codigo = t.com_in_codigo)
And t.lis_in_revisao = (Select Max(d.lis_in_revisao) From mgadm.est_revisaolistamateriais d
Where d.pro_tab_in_codigo = t.pro_tab_in_codigo
And d.pro_pad_in_codigo = t.pro_pad_in_codigo
And d.pro_in_codigo = t.pro_in_codigo )
where b.pro_st_alternativo = '0001016'
Quero criar uma Procedure no qual o campo pro_st_alternativo seja um parametro de pesquisa de relatório pro usuário no Crystal.
Só que meu problema é que irá ter uns 10 campos de parametros de pesquisa no relatório, terei que fazer 10 UNIONS diferente pra cada parametro.
Gostaria de saber como posso fazer isso com o UNION? Ou se tem um melhor jeito de programar isso?
Procedure
-
- Rank: Programador Pleno
- Mensagens: 33
- Registrado em: Qua, 17 Fev 2010 6:30 am
- Localização: Americana
- fsitja
- 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
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
Tenta usando IN e colocando os valores lá dentro.
Você só quer colunas da tabela T? Se for isso o melhor por conta de performance e plano de acesso às tabelas é fazer exists em vez de Inner Join. Testa o seguinte:
Se quiser ver colunas de todas tabelas seria assim:
Talvez eu tenha entendido algo errado... para clarear se não estiver correto, poste uns exemplos de dados para as tabelas e o retorno que você espera ver no select, de forma que a gente possa testar aqui e dar a resposta já na mão.
Abraço,
Francisco.
Você só quer colunas da tabela T? Se for isso o melhor por conta de performance e plano de acesso às tabelas é fazer exists em vez de Inner Join. Testa o seguinte:
SELECT t.*
FROM mgadm.est_itenslistamateriais t
WHERE EXISTS (SELECT 1
FROM mgadm.est_produtos b
WHERE b.pro_st_alternativo IN ('0001184', '0001016')
AND b.pro_tab_in_codigo = t.com_tab_in_codigo
AND b.pro_pad_in_codigo = t.com_pad_in_codigo
AND b.pro_in_codigo = t.com_in_codigo)
AND EXISTS (SELECT 1
FROM mgadm.est_revisaolistamateriais d
WHERE d.pro_tab_in_codigo = t.pro_tab_in_codigo
AND d.pro_pad_in_codigo = t.pro_pad_in_codigo
AND d.pro_in_codigo = t.pro_in_codigo
GROUP BY d.pro_tab_in_codigo, d.pro_pad_in_codigo, d.pro_in_codigo
HAVING MAX(d.lis_in_revisao) = t.lis_in_revisao);
SELECT t.*
FROM mgadm.est_itenslistamateriais t
INNER JOIN (SELECT pro_st_alternativo, pro_tab_in_codigo, pro_pad_in_codigo, pro_in_codigo
FROM mgadm.est_produtos
WHERE pro_st_alternativo IN ('0001184', '0001016')) b
ON b.pro_tab_in_codigo = t.com_tab_in_codigo
AND b.pro_pad_in_codigo = t.com_pad_in_codigo
AND b.pro_in_codigo = t.com_in_codigo
INNER JOIN (SELECT MAX(d.lis_in_revisao) max_lis_in_revisao
FROM mgadm.est_revisaolistamateriais d
GROUP BY d.pro_tab_in_codigo, d.pro_pad_in_codigo, d.pro_in_codigo) e
ON e.pro_tab_in_codigo = t.pro_tab_in_codigo
AND e.pro_pad_in_codigo = t.pro_pad_in_codigo
AND e.pro_in_codigo = t.pro_in_codigo
AND e.max_lis_in_revisao = t.lis_in_revisao;
Abraço,
Francisco.
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 6 visitantes