Jump to content
Fórum Script Brasil
  • 0

EXIBIR TODO OS CLIENTES


Vinicius Schuh

Question

Bom dia Amigos, tenho o seguinte código SQL:

SELECT     
    dbo.tblClientes_grupos.NM As Grupo, 
    dbo.tblAtendimento.CD_Cliente, 
    dbo.Clientes.NomeDoCliente As Cliente, 
    dbo.tblAtendimento.ID As Att, 
    Month(dbo.tblAtendimento.DT_Atendimento) As Mes_Att,
    dbo.tblAtendimento.DT_Atendimento,
    NM_Att = Case Month(dbo.tblAtendimento.DT_Atendimento) 
               When '1' Then 'JANEIRO' When '2' Then 'FEVEREIRO' When '3' Then 'MARÇO' When '4' Then 'ABRIL' When '5' Then 'MAIO' When '6' Then 'JUNHO' When '7' Then 'JULHO' 
               When '8' Then 'AGOSTO' When '9' Then 'SETEMBRO' When '10' Then 'OUTUBRO' When '11' Then 'NOVEMBRO' When '12' Then 'DEZEMBRO' 
             End,
    dbo.tblOrdens_servico.ID As OS, 
    Month(dbo.tblOrdens_servico.DT_Os) As Mes_OS,
              dbo.tblOrdens_servico.DT_Os,
    NM_OS = Case Month(dbo.tblOrdens_servico.DT_Os)
              When '1' Then 'JANEIRO' When '2' Then 'FEVEREIRO' When '3' Then 'MARÇO' When '4' Then 'ABRIL' When '5' Then 'MAIO' When '6' Then 'JUNHO' When '7' Then 'JULHO' 
              When '8' Then 'AGOSTO' When '9' Then 'SETEMBRO' When '10' Then 'OUTUBRO' When '11' Then 'NOVEMBRO' When '12' Then 'DEZEMBRO' 
            End,
    Externo = Case (dbo.tblOrdens_servico.TP_Externo) When '1' Then 'X'  End,
    Interno = Case (dbo.tblOrdens_servico.TP_Interno)  When '1' Then 'X'  End,
   ATT_Status = Case (dbo.tblAtendimento.TP_Status) When '1' Then 'ABE' When '2' Then 'AND' When '3' Then 'FEC' End,
    OS_Status = Case When (dbo.tblOrdens_Servico.TP_Aberta = 1) Then 'ABE' When (dbo.tblOrdens_Servico.TP_Andamento = 1) Then 'AND' 
                    When (dbo.tblOrdens_Servico.TP_Concluida = 1) Then 'FEC' End,    
    ATT_AbertoTotal = Case When (dbo.tblAtendimento.TP_Status = 1 Or dbo.tblAtendimento.TP_Status = 2) Then Count(dbo.tblAtendimento.CD_Cliente) End,
              ATT_FechadoTotal = Case When (dbo.tblAtendimento.TP_Status = 3) Then Count(dbo.tblAtendimento.CD_Cliente) End,                 
              OS_AbertoTotal = Case  When (dbo.tblOrdens_Servico.TP_Aberta = 1 Or dbo.tblOrdens_Servico.TP_Andamento = 1) Then Count(dbo.tblAtendimento.CD_Cliente) End,
    OS_FechadoTotal = Case When (dbo.tblOrdens_Servico.TP_Concluida = 1) Then Count(dbo.tblAtendimento.CD_Cliente) End,
              GETDATE() As DT_Imp
FROM        
              dbo.tblAtendimento 
INNER JOIN
              dbo.Clientes On dbo.tblAtendimento.CD_Cliente = dbo.Clientes.CódigoDoCliente 
LEFT JOIN
              dbo.tblClientes_grupos On dbo.Clientes.ID_Grupo = dbo.tblClientes_grupos.ID 
INNER JOIN
              dbo.Funcionários On dbo.tblAtendimento.CD_Tecnico = dbo.Funcionários.CódigoDoFuncionário 
LEFT JOIN
              dbo.tblOrdens_servico On dbo.tblAtendimento.ID = dbo.tblOrdens_servico.ID_Atendimento
WHERE
             (dbo.tblAtendimento.CD_Cliente Is Not Null) And (dbo.Funcionários.NomeDoFuncionário Is Not Null)
GROUP BY
             dbo.tblClientes_grupos.NM,
             dbo.tblAtendimento.CD_Cliente,
             dbo.Clientes.NomeDoCliente,
             dbo.tblAtendimento.ID, 
             Month(dbo.tblAtendimento.DT_Atendimento),
             Month(dbo.tblOrdens_servico.DT_Os),
             dbo.tblOrdens_servico.ID,
             dbo.tblAtendimento.CD_Tecnico,
             dbo.tblOrdens_servico.TP_Externo,
             dbo.tblOrdens_servico.TP_Interno,
             dbo.tblAtendimento.DT_Atendimento,
             dbo.tblOrdens_servico.DT_Os,
             dbo.Funcionários.NomeDoFuncionário,
             dbo.tblAtendimento.TP_Status,
             dbo.tblOrdens_Servico.TP_Aberta,
             dbo.tblOrdens_Servico.TP_Andamento,
             dbo.tblOrdens_Servico.TP_concluida             
ORDER BY 
             dbo.Clientes.NomeDoCliente asc,             
             dbo.tblAtendimento.DT_Atendimento asc

Onde, resumidamente, ira me listar as ordens de serviço(OS) e Atendimentos(ATT) que um determinado cliente possui no relatório...

Até então, estava ok mas, preciso mostrar todos os clientes, indiferente se tem OS/ATT ou não, sei que com o inner join ele só me trás apenas os que tem OS/ATT vinculados, como poderia fazer para que me liste todos os clientes, se tem OS/ATT ou não?

Obg

Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 0

Boa tarde Vinicius,

Não tenho as tabelas para fazer os testes, mas tente fazer desta forma:

SELECT    
    dbo.tblClientes_grupos.NM As Grupo,
    dbo.tblAtendimento.CD_Cliente,
    dbo.Clientes.NomeDoCliente As Cliente,
    dbo.tblAtendimento.ID As Att,
    Month(dbo.tblAtendimento.DT_Atendimento) As Mes_Att,
    dbo.tblAtendimento.DT_Atendimento,
    NM_Att = Case Month(dbo.tblAtendimento.DT_Atendimento)
               When '1' Then 'JANEIRO' When '2' Then 'FEVEREIRO' When '3' Then 'MARÇO' When '4' Then 'ABRIL' When '5' Then 'MAIO' When '6' Then 'JUNHO' When '7' Then 'JULHO'
               When '8' Then 'AGOSTO' When '9' Then 'SETEMBRO' When '10' Then 'OUTUBRO' When '11' Then 'NOVEMBRO' When '12' Then 'DEZEMBRO'
             End,
    dbo.tblOrdens_servico.ID As OS,
    Month(dbo.tblOrdens_servico.DT_Os) As Mes_OS,
              dbo.tblOrdens_servico.DT_Os,
    NM_OS = Case Month(dbo.tblOrdens_servico.DT_Os)
              When '1' Then 'JANEIRO' When '2' Then 'FEVEREIRO' When '3' Then 'MARÇO' When '4' Then 'ABRIL' When '5' Then 'MAIO' When '6' Then 'JUNHO' When '7' Then 'JULHO'
              When '8' Then 'AGOSTO' When '9' Then 'SETEMBRO' When '10' Then 'OUTUBRO' When '11' Then 'NOVEMBRO' When '12' Then 'DEZEMBRO'
            End,
    Externo = Case (dbo.tblOrdens_servico.TP_Externo) When '1' Then 'X'  End,
    Interno = Case (dbo.tblOrdens_servico.TP_Interno)  When '1' Then 'X'  End,
   ATT_Status = Case (dbo.tblAtendimento.TP_Status) When '1' Then 'ABE' When '2' Then 'AND' When '3' Then 'FEC' End,
    OS_Status = Case When (dbo.tblOrdens_Servico.TP_Aberta = 1) Then 'ABE' When (dbo.tblOrdens_Servico.TP_Andamento = 1) Then 'AND'
                    When (dbo.tblOrdens_Servico.TP_Concluida = 1) Then 'FEC' End,    
    ATT_AbertoTotal = Case When (dbo.tblAtendimento.TP_Status = 1 Or dbo.tblAtendimento.TP_Status = 2) Then Count(dbo.tblAtendimento.CD_Cliente) End,
              ATT_FechadoTotal = Case When (dbo.tblAtendimento.TP_Status = 3) Then Count(dbo.tblAtendimento.CD_Cliente) End,                
              OS_AbertoTotal = Case  When (dbo.tblOrdens_Servico.TP_Aberta = 1 Or dbo.tblOrdens_Servico.TP_Andamento = 1) Then Count(dbo.tblAtendimento.CD_Cliente) End,
    OS_FechadoTotal = Case When (dbo.tblOrdens_Servico.TP_Concluida = 1) Then Count(dbo.tblAtendimento.CD_Cliente) End,
              GETDATE() As DT_Imp
FROM       
              dbo.Clientes
LEFT JOIN
              dbo.tblAtendimento On dbo.tblAtendimento.CD_Cliente = dbo.Clientes.CódigoDoCliente
LEFT JOIN
              dbo.tblClientes_grupos On dbo.Clientes.ID_Grupo = dbo.tblClientes_grupos.ID
INNER JOIN
              dbo.Funcionários On dbo.tblAtendimento.CD_Tecnico = dbo.Funcionários.CódigoDoFuncionário
LEFT JOIN
              dbo.tblOrdens_servico On dbo.tblAtendimento.ID = dbo.tblOrdens_servico.ID_Atendimento
WHERE
             (dbo.tblAtendimento.CD_Cliente Is Not Null) And (dbo.Funcionários.NomeDoFuncionário Is Not Null)
GROUP BY
             dbo.tblClientes_grupos.NM,
             dbo.tblAtendimento.CD_Cliente,
             dbo.Clientes.NomeDoCliente,
             dbo.tblAtendimento.ID,
             Month(dbo.tblAtendimento.DT_Atendimento),
             Month(dbo.tblOrdens_servico.DT_Os),
             dbo.tblOrdens_servico.ID,
             dbo.tblAtendimento.CD_Tecnico,
             dbo.tblOrdens_servico.TP_Externo,
             dbo.tblOrdens_servico.TP_Interno,
             dbo.tblAtendimento.DT_Atendimento,
             dbo.tblOrdens_servico.DT_Os,
             dbo.Funcionários.NomeDoFuncionário,
             dbo.tblAtendimento.TP_Status,
             dbo.tblOrdens_Servico.TP_Aberta,
             dbo.tblOrdens_Servico.TP_Andamento,
             dbo.tblOrdens_Servico.TP_concluida            
ORDER BY
             dbo.Clientes.NomeDoCliente asc,            
             dbo.tblAtendimento.DT_Atendimento asc

Link to comment
Share on other sites

  • 0

Bom dia Fulvio, mudei o relacionamento e consregui listas todos os clientes, apenas no meu relatório que não, mas agora é só uma questão de design mesmo.

FROM        
   dbo.Clientes
LEFT JOIN
    dbo.tblAtendimento On dbo.Clientes.CódigoDoCliente = dbo.tblAtendimento.CD_Cliente
LEFT JOIN
    dbo.tblClientes_grupos On dbo.Clientes.ID_Grupo = dbo.tblClientes_grupos.ID 
LEFT JOIN
   dbo.Funcionários On dbo.tblAtendimento.CD_Tecnico = dbo.Funcionários.CódigoDoFuncionário 
LEFT JOIN
   dbo.tblOrdens_servico On dbo.tblAtendimento.ID = dbo.tblOrdens_servico.ID_Atendimento

Abraço

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...