Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) CONTAR TOTAL REGISTROS TABELA


Vinicius Schuh

Pergunta

Boa tarde amigos e leitores do Fórum espero que esteja tudo bem com todos. Preciso da ajuda de vocês.

Estou desenvolvendo um relatório de orçamentos cujo objetivo será exibir seguintes informações:

Funcionário - Cicrano

Janeiro - teve três orçamentos em aberto (que não foi feito venda)

Teve cinco orçamentos Concluídos (que foram feito venda)

E assim por diante. Fiz o SQL:

SELECT     
       dbo.Funcionários.NomeDoFuncionário, 
       Month(dbo.Orçamento.DataDoOrçamento) As Mes, 
       NM_Mes = Case Month(dbo.Orçamento.DataDoOrçamento) 
                               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.Orçamento.CódigoDoFuncionário,
       Status = Case When NO_Venda Is Not Null Then 'Fechado'
                  When NO_Venda Is Null Then 'Aberto' 
           End    
FROM         
      dbo.Orçamento 
LEFT JOIN
      dbo.Funcionários On dbo.Orçamento.CódigoDoFuncionário = dbo.Funcionários.CódigoDoFuncionário
GROUP BY 
      Month(dbo.Orçamento.DataDoOrçamento), 
      dbo.Funcionários.NomeDoFuncionário, 
      dbo.Orçamento.CódigoDoFuncionário,
      NO_Venda

que me retorna as seguintes informações:

61136712.jpg

Que me trás o funcionário o mes e seus orçamentos, mostrando quais estão concluídos e quais estão em aberto. Para que eu possa saber quais estão em aberto ou fechado na minha tabela existe o campo NO_Venda(varchar de tamanho seis), onde se estiver NULO indica que não teve venda para o orçamento, consequentemente no SQL fiz o case e recebe o valor “ABERTO”, ao contrário disso, se foi feito venda ele preenche o campo com o numero da venda, e verifico se não ESTA NULO, sendo assim, conforme o case no SQL recebe o valor “FECHADO”.

AGORA VAMOS AO PROBLEMA, hehehehe

Eu preciso CONTAR quantos orçamentos do Funcionario X no Mes Y estão em ABERTO e quantos orçamentos estão FECHADOS, para que no relatório ele traga apenas da seguinte forma:

Funcionario - Vinicius

Janeiro = Aberto - 4

Fechado - 5

Fevereiro = Aberto - 2

Fechado - 7

Funcionario - Willian

Janeiro = Aberto - 9

Fechado - 23

Fevereiro = Aberto - 4

Fechado - 1

Desde já agradeço.

Editado por Vinicius Schuh
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Boa tarde Vinicius,

No seu caso, a sua primeira consulta sql já retorna o valor correto. A partir do resultado, você pode criar uma temporária ir fazer um COUNT com o agrupamento Funcionario / Mes / Status.

Fazer a sua primeira consulta e manipular o resultado para conseguir um outro, não terá jeito em 1 sql apenas. Poderá até conseguir utilizando subselects, mas ficará muito complicado e complexo (fora o problema q poderá ter com performance).

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia Vinicius,

Fiz uma alteração no seu script. Coloquei apenas um INTO para q o script gere uma temporária com o resultado. Depois dei um select pra ver o resultado. Rode os dois separadamente:

SELECT    
       dbo.Funcionários.NomeDoFuncionário,
       Month(dbo.Orçamento.DataDoOrçamento) As Mes,
       NM_Mes = Case Month(dbo.Orçamento.DataDoOrçamento)
                               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.Orçamento.CódigoDoFuncionário,
       Status = Case When NO_Venda Is Not Null Then 'Fechado'
                  When NO_Venda Is Null Then 'Aberto'
           End    
INTO #TMP
FROM        
      dbo.Orçamento
LEFT JOIN
      dbo.Funcionários On dbo.Orçamento.CódigoDoFuncionário = dbo.Funcionários.CódigoDoFuncionário
GROUP BY
      Month(dbo.Orçamento.DataDoOrçamento),
      dbo.Funcionários.NomeDoFuncionário,
      dbo.Orçamento.CódigoDoFuncionário,
      NO_Venda
      
      
SELECT * FROM #TMP

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...