none
Total Sobre Campos DateDiff no final da tabela RRS feed

  • Pergunta

  • Olá Pessoal,

    Eu tenho esse código

    select 
    	usuarionome
    	DATEDIFF(DD,datainiciosolemissao,dataemissao) as Total,
    	case when wfabstractetapanome = 'Válido' then SUM (1) end as Resolvidas,
    	avg(DATEDIFF(DD,datainiciosolemissao,dataemissao)) as TempoMedio,
    	max(DATEDIFF(DD,datainiciosolemissao,dataemissao)) as MaiorTempo,
    	min(DATEDIFF(DD,datainiciosolemissao,dataemissao)) as MenorTempo
    from
    	vw_RelDivergencias
    group by 
            usuarionome

    Que me retorna algo parecido com isso:

    UsuarioNome   Total   Resolvidas   TempoMedio  MaiorTempo   MenorTempo

    Julio                    7             1                7                       7                    7

    Ana                     8              1               8                       8                    8

    Como faço para no final ter o total somente sobre as colunas Total e Resolvidas, assim:

    UsuarioNome      Total    Resolvidas       TempoMedio        MaiorTempo                 MenorTempo

    Julio                       7             1                         7                         7                                7

    Ana                        8             1                        8                         8                                8

    Total                    15              2

    E o jeito como eu fiz com as resolvidas, está certo?


    quinta-feira, 11 de dezembro de 2014 17:04

Respostas

  • Boa tarde,

    Experimente dessa forma:

    select 
    	case when GROUPING_ID(usuarionome) = 0 
    	    then usuarionome
    	    else 'Total'
    	end as usuarionome,
    	sum(DATEDIFF(DD,datainiciosolemissao,dataemissao)) as Total,
    	count(case when wfabstractetapanome = 'Válido' then 1 end) as Resolvidas,
    	case when GROUPING_ID(usuarionome) = 0 
    	    then avg(DATEDIFF(DD,datainiciosolemissao,dataemissao)) 
    	end as TempoMedio,
    	case when GROUPING_ID(usuarionome) = 0 
    	    then max(DATEDIFF(DD,datainiciosolemissao,dataemissao)) 
    	end as MaiorTempo,
    	case when GROUPING_ID(usuarionome) = 0 
    	    then min(DATEDIFF(DD,datainiciosolemissao,dataemissao)) 
    	end as MenorTempo
    from
    	vw_RelDivergencias
    group by grouping sets
            ( (usuarionome), () )

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    quinta-feira, 11 de dezembro de 2014 17:20
  • Bom dia Jean,

    Da uma olhada na cláusula COMPUTE, talvez te ajude.

    http://technet.microsoft.com/pt-br/library/ms181708(v=sql.105).aspx


    Att, Bruno Silva.

    quinta-feira, 11 de dezembro de 2014 17:20

Todas as Respostas

  • Boa tarde,

    Experimente dessa forma:

    select 
    	case when GROUPING_ID(usuarionome) = 0 
    	    then usuarionome
    	    else 'Total'
    	end as usuarionome,
    	sum(DATEDIFF(DD,datainiciosolemissao,dataemissao)) as Total,
    	count(case when wfabstractetapanome = 'Válido' then 1 end) as Resolvidas,
    	case when GROUPING_ID(usuarionome) = 0 
    	    then avg(DATEDIFF(DD,datainiciosolemissao,dataemissao)) 
    	end as TempoMedio,
    	case when GROUPING_ID(usuarionome) = 0 
    	    then max(DATEDIFF(DD,datainiciosolemissao,dataemissao)) 
    	end as MaiorTempo,
    	case when GROUPING_ID(usuarionome) = 0 
    	    then min(DATEDIFF(DD,datainiciosolemissao,dataemissao)) 
    	end as MenorTempo
    from
    	vw_RelDivergencias
    group by grouping sets
            ( (usuarionome), () )

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    quinta-feira, 11 de dezembro de 2014 17:20
  • Bom dia Jean,

    Da uma olhada na cláusula COMPUTE, talvez te ajude.

    http://technet.microsoft.com/pt-br/library/ms181708(v=sql.105).aspx


    Att, Bruno Silva.

    quinta-feira, 11 de dezembro de 2014 17:20
  • Quando eu tento fazer o agrupamento por data, como o do select abaixo:

    select 
    case 
    when 
    	GROUPING_ID(DataEntregaSolEmissao) = 0 
    then 
    	DataEntregaSolEmissao else 'Total'
    end as 
    	DataEntregaSolEmissao, 
    	sum(DATEDIFF(DD,datainiciosolemissao,dataemissao)) as Total, 
    	count(case when wfabstractetapanome = 'Válido' then 1 end) as Resolvidas, 
    case when 
    	GROUPING_ID(DataEntregaSolEmissao) = 0 
    then 
    	avg(DATEDIFF(DD,datainiciosolemissao,dataemissao)) 
    end as 
    	TempoMedio, 
    case when 
    	GROUPING_ID(DataEntregaSolEmissao) = 0 
    then 
    	max(DATEDIFF(DD,datainiciosolemissao,dataemissao)) end as MaiorTempo, 
    case when 
    	GROUPING_ID(DataEntregaSolEmissao) = 0 
    then 
    	min(DATEDIFF(DD,datainiciosolemissao,dataemissao)) end as MenorTempo 
    from 
    	vw_RelDivergencias 
    where 
    	1 = 1 
    and 
    	AcessoUsuarioId = 31 
    and 
    	DataEntregaSolEmissao >= '2014-12-01 00:00:00'  
    AND 
    	DataEntregaSolEmissao <= '2014-12-31 23:59:59'  
    and 
    	SolicitacaoTipoId = 3 
    group by grouping sets 
    	( (DataEntregaSolEmissao), () )

    Aparece a seguinte mensagem:

    Msg 241, Level 16, State 1, Line 1
    Conversion failed when converting date and/or time from character string.

    Como eu faço para contornar esta situação?

    quinta-feira, 11 de dezembro de 2014 19:48
  • De que tipo são as colunas DtaEntregaSolEmissao e DataEmissao?

    Se forem do tipo Date, DateTime ou algum outro tipo específico para datas, acredito que o problema está no formato da data no Where. Nesse caso, para evitar problemas com o formato você poderia utilizar da seguinte forma:

    	DataEntregaSolEmissao >= '20141201 00:00:00'  
    AND 
    	DataEntregaSolEmissao <= '20141231 23:59:59'  

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    quinta-feira, 11 de dezembro de 2014 20:02