Fórum Subquery enchergar aliases com mais de um nível acima! #445904
19/06/2013
0
Bom dia!
Tenho um primeiro SQL que lista alguns clientes, e tenho um segundo SQL muito extenso que eu preciso usar como SUBQUERY no primeiro, para obter um total referente a cada cliente, mas o que eu precisava exatamente, era que essa minha subquery enchergasse minha aliases do meu primeiro SQL! Pelo fato dessa meu segundo SQL também ter alguma subquerys, ficou dificil adaptar!
Este é meu código:
Então, nos lugares que "c.CodCli" estão recebendo o parâmetro :pCodCli1, :pCodCli2, :pCodCli3 e :pCodCli4 que devera ser alterado! Em vez de receber os parâmetros, deverão receber a aliases do primeiro SQL "c2.CodCli", mas minha subquery não encherga essa aliases :(
Existe alguma maneira de deixar uma aliases global ? Posso estar falando besteira, é que não entendo muito de SQL, estou aprendendo de acordo com as necessidades!
Muito Obrigado!
Tenho um primeiro SQL que lista alguns clientes, e tenho um segundo SQL muito extenso que eu preciso usar como SUBQUERY no primeiro, para obter um total referente a cada cliente, mas o que eu precisava exatamente, era que essa minha subquery enchergasse minha aliases do meu primeiro SQL! Pelo fato dessa meu segundo SQL também ter alguma subquerys, ficou dificil adaptar!
Este é meu código:
Select c2.CodCli as "Código", v2.Nome as Nome_Vendedor, c2.NomeRed as "Cliente", k2.Nome as "Contato", c2.Fone1, v2.NomeRed as "Carteira"
, (Select Sum(Valor_Total) From
(Select t.Base, t.Chave_Cliente, t.Nome, t.NF, t.Descricao_Produto, t.Data_Emissao, t.Codigo_Produto, t.CodProd, t.Quantidade, t.Unidade, t.Carteira, t.CodCli, t.Cliente, t.Nome_Fantasia, t.Contato, t.Telefone, t.Valor_Total, t.Preco_Unitario
From
(Select Base, Chave_Cliente, Nome, NF, Descricao_Produto, Data_Emissao, Codigo_Produto
, (Case When (Base = 'GO') then SUBSTR(Codigo_Produto, 2, 999 ) else Codigo_Produto end ) as CodProd
, Quantidade, Unidade, Carteira, CodCli, Cliente, Nome_Fantasia, Contato, Telefone, Valor_Total, Preco_Unitario
From
(
Select 'SP' as Base, n.Chave_Cliente, c.Nome, n.NF, i.Descricao_Produto, n.Data_Emissao, i.Codigo_Produto, i.Quantidade, i.Unidade, v.NomeRed as Carteira, c.CodCli, c.Nome as Cliente, c.NomeRed as Nome_Fantasia, k.Nome as Contato, c.Fone1 as Telefone, cast(i.Valor_Total as float) as Valor_Total, i.Preco_Faturado as Preco_Unitario
from Pharmacopeia.Produtos p
inner join Pharmacopeia.Notas_Itens i on p.codigo = i.codigo_produto
inner join pharmacopeia.notas n on n.chave = i.chave_nota
inner join Pharmacopeia.Clientes c on n.Chave_Cliente = c.CodCli
inner join Pharmacopeia.Vendedores v on c.CodVend = v.CodVendedor
inner join Pharmacopeia.Contatos k on c.Contato_Padrao = k.Chave
where p.chave_familia= 12 and p.produto= 'SIM' and p.qualidade_critica= 'SIM'
and p.chave_familia=12 and p.produto= 'SIM' and p.qualidade_critica= 'SIM'
and v.Chave_Canal = 12 and v.Inativo = 'NAO'
and v.CodVendedor = 770
and c.CodCli = :pCodCli1
Union
Select 'GO' as Base, n.Chave_Cliente, c.Nome, n.NF, i.Descricao_Produto, n.Data_Emissao, i.Codigo_Produto, i.Quantidade, i.Unidade, v.NomeRed as Carteira, c.CodCli, c.Nome as Cliente, c.NomeRed as Nome_Fantasia, k.Nome as Contato, c.Fone1 as Telefone, cast(i.Valor_Total as float) as Valor_Total, i.Preco_Faturado as Preco_Unitario
from Attivos.Produtos p
inner join Attivos.Notas_Itens i on p.codigo = i.codigo_produto
inner join Attivos.notas n on n.chave = i.chave_nota
inner join Attivos.Clientes c on n.Chave_Cliente = c.CodCli
inner join Attivos.Vendedores v on c.CodVend = v.CodVendedor
inner join Attivos.Contatos k on c.Contato_Padrao = k.Chave
where p.chave_familia= 12 and p.produto= 'SIM' and p.qualidade_critica= 'SIM'
and p.chave_familia=12 and p.produto= 'SIM' and p.qualidade_critica= 'SIM'
and v.Chave_Canal = 12 and v.Inativo = 'NAO'
and v.CodVendedor = 770
and c.CodCli = :pCodCli2
) ) t
Inner Join
(Select Max(Data_Emissao) as Data_Emissao, CodProd
From
(Select Base, Chave_Cliente, Nome, NF, Descricao_Produto, Data_Emissao, Codigo_Produto
, (Case When (Base = 'GO') then SUBSTR(Codigo_Produto, 2, 999 ) else Codigo_Produto end ) as CodProd
, Quantidade, Unidade, Carteira, CodCli, Cliente, Nome_Fantasia, Contato, Telefone, Valor_Total, Preco_Unitario
From
(
Select 'SP' as Base, n.Chave_Cliente, c.Nome, n.NF, i.Descricao_Produto, n.Data_Emissao, i.Codigo_Produto, i.Quantidade, i.Unidade, v.NomeRed as Carteira, c.CodCli, c.Nome as Cliente, c.NomeRed as Nome_Fantasia, k.Nome as Contato, c.Fone1 as Telefone, cast(i.Valor_Total as float) as Valor_Total, i.Preco_Faturado as Preco_Unitario
from Pharmacopeia.Produtos p
inner join Pharmacopeia.Notas_Itens i on p.codigo = i.codigo_produto
inner join pharmacopeia.notas n on n.chave = i.chave_nota
inner join Pharmacopeia.Clientes c on n.Chave_Cliente = c.CodCli
inner join Pharmacopeia.Vendedores v on c.CodVend = v.CodVendedor
inner join Pharmacopeia.Contatos k on c.Contato_Padrao = k.Chave
where p.chave_familia= 12 and p.produto= 'SIM' and p.qualidade_critica= 'SIM'
and p.chave_familia=12 and p.produto= 'SIM' and p.qualidade_critica= 'SIM'
and v.Chave_Canal = 12 and v.Inativo = 'NAO'
and v.CodVendedor = 770
and c.CodCli = :pCodCli3
Union
Select 'GO' as Base, n.Chave_Cliente, c.Nome, n.NF, i.Descricao_Produto, n.Data_Emissao, i.Codigo_Produto, i.Quantidade, i.Unidade, v.NomeRed as Carteira, c.CodCli, c.Nome as Cliente, c.NomeRed as Nome_Fantasia, k.Nome as Contato, c.Fone1 as Telefone, cast(i.Valor_Total as float) as Valor_Total, i.Preco_Faturado as Preco_Unitario
from Attivos.Produtos p
inner join Attivos.Notas_Itens i on p.codigo = i.codigo_produto
inner join Attivos.notas n on n.chave = i.chave_nota
inner join Attivos.Clientes c on n.Chave_Cliente = c.CodCli
inner join Attivos.Vendedores v on c.CodVend = v.CodVendedor
inner join Attivos.Contatos k on c.Contato_Padrao = k.Chave
where p.chave_familia= 12 and p.produto= 'SIM' and p.qualidade_critica= 'SIM'
and p.chave_familia=12 and p.produto= 'SIM' and p.qualidade_critica= 'SIM'
and v.Chave_Canal = 12 and v.Inativo = 'NAO'
and v.CodVendedor = 770
and c.CodCli = :pCodCli4
) )
Group By CodProd) B
On (t.CodProd = b.CodProd and t.Data_Emissao = b.Data_Emissao)
Order By t.CodProd, t.Data_Emissao
)
Where Data_Emissao >= (Sysdate - 45) and Data_Emissao <= (Sysdate - 31) ) as Total_Acumulado
From Pharmacopeia.Clientes c2, Pharmacopeia.Vendedores v2, Pharmacopeia.Contatos k2
Where c2.CodVend = v2.CodVendedor
and c2.Contato_Padrao = k2.Chave
and v2.Chave_Canal = 12 and v2.Inativo = 'NAO'
and v2.CodVendedor = 770
Então, nos lugares que "c.CodCli" estão recebendo o parâmetro :pCodCli1, :pCodCli2, :pCodCli3 e :pCodCli4 que devera ser alterado! Em vez de receber os parâmetros, deverão receber a aliases do primeiro SQL "c2.CodCli", mas minha subquery não encherga essa aliases :(
Existe alguma maneira de deixar uma aliases global ? Posso estar falando besteira, é que não entendo muito de SQL, estou aprendendo de acordo com as necessidades!
Muito Obrigado!
Mateus Ribeiro
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)