Query esta trazendo 3 colunas como null porem tem dados
03/04/2024
0
Bom dia
A query abaixo esta me retornando a coluna fullname, comercialphone e comercialemail como null e essas colunas tem dados, como faço para corrigir esse problema
select
Crm_Clientes.CodCliente,
Crm_Clientes.RazaoSocial,
Crm_Clientes.Nome as NomeCliente,
Crm_Clientes.CGC,
Crm_Clientes.CodExterno,
crmISActorContact.FullName,
CRM_ClientesXContatos.telefone,
crmISActorContact.CommercialPhone,
crmISActorContact.CommercialEmail,
crmIsIndustry.Description,
Crm_Clientes.CodVendedor,
Crm_Enderecos.cidade,
Crm_Enderecos.uf,
Vendedores.Nome,
View_usr_qttQuoteTest1.UltimoOrcamento,
max (COMRHeaderPedido.DtPedido),
crmTCActor.InsDt,
crmTCActor.UpdDt
from Crm_Clientes
left join View_usr_qttQuoteTest1 on View_usr_qttQuoteTest1.Code = Crm_Clientes.CodCliente
left join COMRHeaderPedido on COMRHeaderPedido.CliProduto = Crm_Clientes.CodCliente
inner join crmTCActor on crmTCActor.Code = Convert(varchar(32),Crm_Clientes.CodCliente)
inner join Vendedores on Vendedores.CodVendedor = Crm_Clientes.CodVendedor
inner join Crm_Enderecos on Crm_Enderecos.ObjId_Cliente = crm_clientes.ObjId
inner join crmTCCustomer on crmTCCustomer.IdActor = crmTCActor.IdActor
left join crmISIndustry on crmTCCustomer.IdIndustry = crmISIndustry.IdIndustry
left join CRM_ClientesXContatos on CRM_ClientesXContatos .ObjId_Cliente = Crm_Clientes.ObjId
left join crmISActorContact on CRM_ClientesXContatos.ObjId_Cliente = crmISActorContact .IdActorContact
where CodExterno = ''CL''
group by
DtUltimaCompra,
View_usr_qttQuoteTest1.UltimoOrcamento,
Crm_Clientes.CodVendedor,
COMRHeaderPedido.CliProduto,
Crm_Clientes.CodCliente,
Crm_Clientes.RazaoSocial,
Crm_Clientes.Nome,
Crm_Clientes.CGC,
Crm_Clientes.CodExterno,
Vendedores.Nome,
crmTCActor.UpdDt,
crmTCActor.InsDt,
Crm_Enderecos.cidade,
Crm_Enderecos.uf,
crmIsIndustry.Description,
crmISActorContact.FullName,
CRM_ClientesXContatos.telefone,
crmISActorContact.CommercialPhone,
crmISActorContact.CommercialEmail
A query abaixo esta me retornando a coluna fullname, comercialphone e comercialemail como null e essas colunas tem dados, como faço para corrigir esse problema
select
Crm_Clientes.CodCliente,
Crm_Clientes.RazaoSocial,
Crm_Clientes.Nome as NomeCliente,
Crm_Clientes.CGC,
Crm_Clientes.CodExterno,
crmISActorContact.FullName,
CRM_ClientesXContatos.telefone,
crmISActorContact.CommercialPhone,
crmISActorContact.CommercialEmail,
crmIsIndustry.Description,
Crm_Clientes.CodVendedor,
Crm_Enderecos.cidade,
Crm_Enderecos.uf,
Vendedores.Nome,
View_usr_qttQuoteTest1.UltimoOrcamento,
max (COMRHeaderPedido.DtPedido),
crmTCActor.InsDt,
crmTCActor.UpdDt
from Crm_Clientes
left join View_usr_qttQuoteTest1 on View_usr_qttQuoteTest1.Code = Crm_Clientes.CodCliente
left join COMRHeaderPedido on COMRHeaderPedido.CliProduto = Crm_Clientes.CodCliente
inner join crmTCActor on crmTCActor.Code = Convert(varchar(32),Crm_Clientes.CodCliente)
inner join Vendedores on Vendedores.CodVendedor = Crm_Clientes.CodVendedor
inner join Crm_Enderecos on Crm_Enderecos.ObjId_Cliente = crm_clientes.ObjId
inner join crmTCCustomer on crmTCCustomer.IdActor = crmTCActor.IdActor
left join crmISIndustry on crmTCCustomer.IdIndustry = crmISIndustry.IdIndustry
left join CRM_ClientesXContatos on CRM_ClientesXContatos .ObjId_Cliente = Crm_Clientes.ObjId
left join crmISActorContact on CRM_ClientesXContatos.ObjId_Cliente = crmISActorContact .IdActorContact
where CodExterno = ''CL''
group by
DtUltimaCompra,
View_usr_qttQuoteTest1.UltimoOrcamento,
Crm_Clientes.CodVendedor,
COMRHeaderPedido.CliProduto,
Crm_Clientes.CodCliente,
Crm_Clientes.RazaoSocial,
Crm_Clientes.Nome,
Crm_Clientes.CGC,
Crm_Clientes.CodExterno,
Vendedores.Nome,
crmTCActor.UpdDt,
crmTCActor.InsDt,
Crm_Enderecos.cidade,
Crm_Enderecos.uf,
crmIsIndustry.Description,
crmISActorContact.FullName,
CRM_ClientesXContatos.telefone,
crmISActorContact.CommercialPhone,
crmISActorContact.CommercialEmail
Enock Junior
Curtir tópico
+ 0
Responder
Posts
03/04/2024
ɐɾǝɹƃi
Bom dia
A query abaixo esta me retornando a coluna fullname, comercialphone e comercialemail como null e essas colunas tem dados, como faço para corrigir esse problema
select
Crm_Clientes.CodCliente,
Crm_Clientes.RazaoSocial,
Crm_Clientes.Nome as NomeCliente,
Crm_Clientes.CGC,
Crm_Clientes.CodExterno,
crmISActorContact.FullName,
CRM_ClientesXContatos.telefone,
crmISActorContact.CommercialPhone,
crmISActorContact.CommercialEmail,
crmIsIndustry.Description,
Crm_Clientes.CodVendedor,
Crm_Enderecos.cidade,
Crm_Enderecos.uf,
Vendedores.Nome,
View_usr_qttQuoteTest1.UltimoOrcamento,
max (COMRHeaderPedido.DtPedido),
crmTCActor.InsDt,
crmTCActor.UpdDt
from Crm_Clientes
left join View_usr_qttQuoteTest1 on View_usr_qttQuoteTest1.Code = Crm_Clientes.CodCliente
left join COMRHeaderPedido on COMRHeaderPedido.CliProduto = Crm_Clientes.CodCliente
inner join crmTCActor on crmTCActor.Code = Convert(varchar(32),Crm_Clientes.CodCliente)
inner join Vendedores on Vendedores.CodVendedor = Crm_Clientes.CodVendedor
inner join Crm_Enderecos on Crm_Enderecos.ObjId_Cliente = crm_clientes.ObjId
inner join crmTCCustomer on crmTCCustomer.IdActor = crmTCActor.IdActor
left join crmISIndustry on crmTCCustomer.IdIndustry = crmISIndustry.IdIndustry
left join CRM_ClientesXContatos on CRM_ClientesXContatos .ObjId_Cliente = Crm_Clientes.ObjId
left join crmISActorContact on CRM_ClientesXContatos.ObjId_Cliente = crmISActorContact .IdActorContact
where CodExterno = ''CL''
group by
DtUltimaCompra,
View_usr_qttQuoteTest1.UltimoOrcamento,
Crm_Clientes.CodVendedor,
COMRHeaderPedido.CliProduto,
Crm_Clientes.CodCliente,
Crm_Clientes.RazaoSocial,
Crm_Clientes.Nome,
Crm_Clientes.CGC,
Crm_Clientes.CodExterno,
Vendedores.Nome,
crmTCActor.UpdDt,
crmTCActor.InsDt,
Crm_Enderecos.cidade,
Crm_Enderecos.uf,
crmIsIndustry.Description,
crmISActorContact.FullName,
CRM_ClientesXContatos.telefone,
crmISActorContact.CommercialPhone,
crmISActorContact.CommercialEmail
A query abaixo esta me retornando a coluna fullname, comercialphone e comercialemail como null e essas colunas tem dados, como faço para corrigir esse problema
select
Crm_Clientes.CodCliente,
Crm_Clientes.RazaoSocial,
Crm_Clientes.Nome as NomeCliente,
Crm_Clientes.CGC,
Crm_Clientes.CodExterno,
crmISActorContact.FullName,
CRM_ClientesXContatos.telefone,
crmISActorContact.CommercialPhone,
crmISActorContact.CommercialEmail,
crmIsIndustry.Description,
Crm_Clientes.CodVendedor,
Crm_Enderecos.cidade,
Crm_Enderecos.uf,
Vendedores.Nome,
View_usr_qttQuoteTest1.UltimoOrcamento,
max (COMRHeaderPedido.DtPedido),
crmTCActor.InsDt,
crmTCActor.UpdDt
from Crm_Clientes
left join View_usr_qttQuoteTest1 on View_usr_qttQuoteTest1.Code = Crm_Clientes.CodCliente
left join COMRHeaderPedido on COMRHeaderPedido.CliProduto = Crm_Clientes.CodCliente
inner join crmTCActor on crmTCActor.Code = Convert(varchar(32),Crm_Clientes.CodCliente)
inner join Vendedores on Vendedores.CodVendedor = Crm_Clientes.CodVendedor
inner join Crm_Enderecos on Crm_Enderecos.ObjId_Cliente = crm_clientes.ObjId
inner join crmTCCustomer on crmTCCustomer.IdActor = crmTCActor.IdActor
left join crmISIndustry on crmTCCustomer.IdIndustry = crmISIndustry.IdIndustry
left join CRM_ClientesXContatos on CRM_ClientesXContatos .ObjId_Cliente = Crm_Clientes.ObjId
left join crmISActorContact on CRM_ClientesXContatos.ObjId_Cliente = crmISActorContact .IdActorContact
where CodExterno = ''CL''
group by
DtUltimaCompra,
View_usr_qttQuoteTest1.UltimoOrcamento,
Crm_Clientes.CodVendedor,
COMRHeaderPedido.CliProduto,
Crm_Clientes.CodCliente,
Crm_Clientes.RazaoSocial,
Crm_Clientes.Nome,
Crm_Clientes.CGC,
Crm_Clientes.CodExterno,
Vendedores.Nome,
crmTCActor.UpdDt,
crmTCActor.InsDt,
Crm_Enderecos.cidade,
Crm_Enderecos.uf,
crmIsIndustry.Description,
crmISActorContact.FullName,
CRM_ClientesXContatos.telefone,
crmISActorContact.CommercialPhone,
crmISActorContact.CommercialEmail
Analisando a Query e Possíveis Soluções para Colunas NULL
Problema: A query está retornando as colunas fullname, comercialphone e commercialemail como NULL, mesmo que existam dados nelas.
Possíveis Causas:
Joins Incorretos: Verifique se os joins na query estão corretos. Erros nos joins podem resultar em colunas com valores incorretos ou ausentes.
Colunas Inexistentes: Confirme se as colunas fullname, comercialphone e commercialemail existem nas tabelas referenciadas na query.
Tipos de Dados Incompatíveis: Verifique se os tipos de dados das colunas na query são compatíveis com as operações realizadas.
Valores Nulos nas Tabelas: É possível que as colunas em questão realmente estejam vazias (NULL) nas tabelas.
Funções Agregadas Inválidas: Se você estiver usando funções agregadas (como max) em colunas que podem conter valores NULL, isso pode resultar em valores NULL na saída.
Soluções:
Revisar os Joins: Verifique cada join na query e certifique-se de que as condições de join sejam precisas e conectem as tabelas corretamente.
Confirmar Colunas: Verifique se as colunas que você está selecionando existem nas tabelas referenciadas. Se não existirem, remova-as da query.
Validar Tipos de Dados: Verifique se os tipos de dados das colunas são compatíveis com as operações realizadas na query. Se necessário, faça conversões de tipo de dados.
Tratar Valores Nulos: Se as colunas podem conter valores NULL, utilize funções como COALESCE ou ISNULL para substituir os valores NULL por valores alternativos.
Filtrar por Valores Não Nulos: Utilize a cláusula WHERE para filtrar os resultados por linhas que não possuem valores NULL nas colunas desejadas.
Dicas Adicionais:
Utilize ferramentas de análise de consultas para verificar a estrutura da query e identificar erros.
Execute a query passo a passo para analisar os resultados intermediários e identificar o problema.
Consulte a documentação do seu sistema de gerenciamento de banco de dados para obter mais informações sobre joins, tipos de dados e funções agregadas.
1. Substituir Valores Nulos por Texto Vazio:
SQL
SELECT ... COALESCE(crmISActorContact.FullName, '') AS FullName, COALESCE(crmISActorContact.CommercialPhone, '') AS CommercialPhone, COALESCE(crmISActorContact.CommercialEmail, '') AS CommercialEmail, ...
2. Filtrar por Valores Não Nulos:
SQL
SELECT ... crmISActorContact.FullName, crmISActorContact.CommercialPhone, crmISActorContact.CommercialEmail, ... FROM Crm_Clientes ... WHERE crmISActorContact.FullName IS NOT NULL AND crmISActorContact.CommercialPhone IS NOT NULL AND crmISActorContact.CommercialEmail IS NOT NULL
3. Revisar Joins:
Verifique se as condições de join em cada join da query estão corretas. Certifique-se de que as colunas usadas na comparação de join existam nas tabelas e que os valores comparados sejam compatíveis.
4. Depuração Passo a Passo:
Execute a query passo a passo para analisar os resultados intermediários. Isso pode ajudar a identificar em qual etapa da query o problema está ocorrendo.
Ao seguir estas dicas e implementar as soluções adequadas, você deve conseguir corrigir o problema das colunas fullname, comercialphone e commercialemail serem retornadas como NULL na sua query.
Satisfação, Enock.
Responder
04/04/2024
Arthur Heinrich
A resposta acima está bastante completa.
Uma coisa a mais que você pode fazer, para testar é o seguinte:
A coluna FullName, por exemplo, vem da tabela crmISActorContact.
left join crmISActorContact on CRM_ClientesXContatos.ObjId_Cliente = crmISActorContact .IdActorContact
O registro é buscado pela coluna crmISActorContact .IdActorContact, com base no valor de CRM_ClientesXContatos.ObjId_Cliente.
Adicione estas duas colunas à lista de colunas retornadas e veja o que elas retornam.
Ambas as tabelas estão sendo acessadas com "left outer join e, podem não estar retornando nada.
Se CRM_ClientesXContatos.ObjId_Cliente apresentar valor NULL, é um sinal de que esta tabela não foi localizada e temos que verificar o join dela.
Se estiver preenchida, devemos olhar a coluna crmISActorContact .IdActorContact, que deveria ser igual. Se for NULL, é porque o registro não existe e poderia indicar que o join correto não é este. Se estiver preenchida, é sinal de que a coluna FullName está NULL na tabela, pois o registro foi encontrado.
Se CRM_ClientesXContatos.ObjId_Cliente for null, temos que analisar o seu join
left join CRM_ClientesXContatos on CRM_ClientesXContatos .ObjId_Cliente = Crm_Clientes.ObjId
A tabela Crm_Clientes é, supostamente, a tabela driver. Ela deve existir em todas as linhas retornadas. Então, a coluna Crm_Clientes.ObjId deve estar preenchida. Adicione ela ao resultado para verificar isso.
Se estiver preenchida, a tabela CRM_ClientesXContatos não possui o registro correspondente, ou você errou o join entre elas.
Devido à correspondência de outros joins, você pode alterar o join:
left join crmISActorContact on CRM_ClientesXContatos.ObjId_Cliente = crmISActorContact .IdActorContact
Por:
left join crmISActorContact on Crm_Clientes.ObjId = crmISActorContact .IdActorContact
Desta forma, ele passa a depender sempre da tabela driver e não mais da outra tabela que pode não possuir o registro correspondente.
Uma coisa a mais que você pode fazer, para testar é o seguinte:
A coluna FullName, por exemplo, vem da tabela crmISActorContact.
left join crmISActorContact on CRM_ClientesXContatos.ObjId_Cliente = crmISActorContact .IdActorContact
O registro é buscado pela coluna crmISActorContact .IdActorContact, com base no valor de CRM_ClientesXContatos.ObjId_Cliente.
Adicione estas duas colunas à lista de colunas retornadas e veja o que elas retornam.
Ambas as tabelas estão sendo acessadas com "left outer join e, podem não estar retornando nada.
Se CRM_ClientesXContatos.ObjId_Cliente apresentar valor NULL, é um sinal de que esta tabela não foi localizada e temos que verificar o join dela.
Se estiver preenchida, devemos olhar a coluna crmISActorContact .IdActorContact, que deveria ser igual. Se for NULL, é porque o registro não existe e poderia indicar que o join correto não é este. Se estiver preenchida, é sinal de que a coluna FullName está NULL na tabela, pois o registro foi encontrado.
Se CRM_ClientesXContatos.ObjId_Cliente for null, temos que analisar o seu join
left join CRM_ClientesXContatos on CRM_ClientesXContatos .ObjId_Cliente = Crm_Clientes.ObjId
A tabela Crm_Clientes é, supostamente, a tabela driver. Ela deve existir em todas as linhas retornadas. Então, a coluna Crm_Clientes.ObjId deve estar preenchida. Adicione ela ao resultado para verificar isso.
Se estiver preenchida, a tabela CRM_ClientesXContatos não possui o registro correspondente, ou você errou o join entre elas.
Devido à correspondência de outros joins, você pode alterar o join:
left join crmISActorContact on CRM_ClientesXContatos.ObjId_Cliente = crmISActorContact .IdActorContact
Por:
left join crmISActorContact on Crm_Clientes.ObjId = crmISActorContact .IdActorContact
Desta forma, ele passa a depender sempre da tabela driver e não mais da outra tabela que pode não possuir o registro correspondente.
Responder
Clique aqui para fazer login e interagir na Comunidade :)