PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

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:


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

Mateus Ribeiro

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar