Jump to content
Fórum Script Brasil
  • 0

(Resolvido) CONTAR TOTAL REGISTROS TABELA


Vinicius Schuh

Question

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.

Edited by Vinicius Schuh
Link to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 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
      652.1k
×
×
  • Create New...