none
Sub-Select RRS feed

  • Pergunta

  • Bom dia, sou iniciante com T-SQL e gostaria da ajuda de vocês, estou tentando fazer um relatório onde busco a quantidade de pessoas que passaram na catraca.

    Ultimamente venho retirando esses dados diariamente com o COUNT(DISTINCT ...) porem quanto coloco um período maior não bate justamente pelo DISTINCT.

    Como resolvo esta logica? Com Cursor nos dias? Com um sub-select?

    Obrigado,

    Segue o select:

    	  select COUNT(DISTINCT A.NOME)
    	  from  PESSOAS A  INNER JOIN LOG B ON 
    	  A.NUMERO = B.NUMERO 
    	  where 
    	  B.DATAHORA >= '2013-12-01 00:00:00.000' and
    	  B.DATAHORA <= '2013-12-02 00:00:00.000'
    	  	
    		-----------
    		5
    		(1 row(s) affected)
    	  
    	  
    	  select COUNT(DISTINCT A.NOME)
    	  from  PESSOAS A  INNER JOIN LOG B ON 
    	  A.NUMERO = B.NUMERO 
    	  where 
    	  B.DATAHORA >= '2013-12-02 00:00:00.000' and
    	  B.DATAHORA <= '2013-12-03 00:00:00.000'
    	    
    		-----------
    		412
    		(1 row(s) affected)
    	  	  
    	  select COUNT(DISTINCT A.NOME)
    	  from  PESSOAS A  INNER JOIN LOG B ON 
    	  A.NUMERO = B.NUMERO 
    	  where 
    	  B.DATAHORA >= '2013-12-03 00:00:00.000' and
    	  B.DATAHORA <= '2013-12-04 00:00:00.000'
    	  	  
    		-----------
    		420
    		(1 row(s) affected)
    		
    		
    		TOTAL 420 + 412 + 5 = 837
    				
    		-----------------------------------------------------------------------
    		-----------------------------------------------------------------------
    		-----------------------------------------------------------------------
    		
    	  select COUNT(DISTINCT A.NOME)
    	  from  PESSOAS A  INNER JOIN LOG B ON 
    	  A.NUMERO = B.NUMERO 
    	  where 
    	  B.DATAHORA >= '2013-12-01 00:00:00.000' and
    	  B.DATAHORA <= '2013-12-04 00:00:00.000'
    				
    		-----------
    		427
    		(1 row(s) affected)
    



    terça-feira, 21 de janeiro de 2014 10:55

Respostas

  • Bom dia ramos pode tentar,

    select
    	sum(Qtd) as Total
    from (
    	select A.NOME, COUNT(distinct convert(date, B.DATAHORA)) as Qtd
    	from  PESSOAS A  INNER JOIN LOG B ON 
    	A.NUMERO = B.NUMERO 
    	where 
    	B.DATAHORA >= '2013-12-01 00:00:00.000' and
    	B.DATAHORA <= '2013-12-03 00:00:00.000'
    	group by A.NOME
    ) T

    • Marcado como Resposta ramos_sa terça-feira, 21 de janeiro de 2014 11:22
    terça-feira, 21 de janeiro de 2014 11:15

Todas as Respostas

  • Bom dia ramos pode tentar,

    select
    	sum(Qtd) as Total
    from (
    	select A.NOME, COUNT(distinct convert(date, B.DATAHORA)) as Qtd
    	from  PESSOAS A  INNER JOIN LOG B ON 
    	A.NUMERO = B.NUMERO 
    	where 
    	B.DATAHORA >= '2013-12-01 00:00:00.000' and
    	B.DATAHORA <= '2013-12-03 00:00:00.000'
    	group by A.NOME
    ) T

    • Marcado como Resposta ramos_sa terça-feira, 21 de janeiro de 2014 11:22
    terça-feira, 21 de janeiro de 2014 11:15
  • Perfeito Lucas!

    Obrigado

    terça-feira, 21 de janeiro de 2014 11:22