Query esta trazendo 3 colunas como null porem tem dados

SQL Server

SQL

Query

03/04/2024

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
Enock Junior

Enock Junior

Curtidas 0

Respostas

ɐɾǝɹƃi

ɐɾǝɹƃi

03/04/2024

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




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.
GOSTEI 0
Arthur Heinrich

Arthur Heinrich

03/04/2024

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.
GOSTEI 0
POSTAR