Usuário com melhor resposta
Total Sobre Campos DateDiff no final da tabela

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?
- Editado Jean F Cavalcante quinta-feira, 11 de dezembro de 2014 17:07
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
- Marcado como Resposta Jean F Cavalcante quinta-feira, 11 de dezembro de 2014 17:37
-
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.
- Marcado como Resposta Jean F Cavalcante quinta-feira, 11 de dezembro de 2014 17:37
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
- Marcado como Resposta Jean F Cavalcante quinta-feira, 11 de dezembro de 2014 17:37
-
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.
- Marcado como Resposta Jean F Cavalcante quinta-feira, 11 de dezembro de 2014 17:37
-
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?
-
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