Fernandinha Postado Março 21, 2012 Denunciar Share Postado Março 21, 2012 (editado) Olá pessoal!!Tenho o seguinte select:SELECT DISTINCT Id, TotalHoras = REPLICATE('0',2-LEN(HrRealizadas))+ CAST((SUM(HrRealizadas) % 60) AS VARCHAR(2)) + ':' + REPLICATE('0',2-LEN(MinRealizados))+ CAST((SUM(MinRealizados) % 60) AS VARCHAR(2))/*(sum(HrRealizadas)+sum(MinRealizados/60))*/ FROM FREQUENCIAWHERE Id = 5GROUP BY Id, HrRealizadas, MinRealizadosEle está me retornando:Id TotalHoras11195 04:4511195 36:00Porém gostaria que ele me retornasse isso:Id TotalHoras11195 40:45Alguém pode me dar um help, por favor?Obrigada. Editado Março 22, 2012 por Fernandinha Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Março 21, 2012 Denunciar Share Postado Março 21, 2012 Bom dia Fernandinha, Olha se assim roda:SELECT Id, TotalHoras = REPLICATE('0',2-LEN(HrRealizadas))+ CAST((SUM(HrRealizadas) % 60) AS VARCHAR(2)) + ':' + REPLICATE('0',2-LEN(MinRealizados))+ CAST((SUM(MinRealizados) % 60) AS VARCHAR(2))/*(sum(HrRealizadas)+sum(MinRealizados/60))*/ FROM FREQUENCIA WHERE Id = 5 GROUP BY Id Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Fernandinha Postado Março 22, 2012 Autor Denunciar Share Postado Março 22, 2012 Bom dia Fulvio!Então, dessa forma eu já havia tentado, mas dá o seguinte erro:Msg 8120, Level 16, State 1, Line 2Column 'FREQUENCIA.HrRealizadas' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.Msg 8120, Level 16, State 1, Line 2Column 'FREQUENCIA.MinRealizados' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Março 22, 2012 Denunciar Share Postado Março 22, 2012 Bom dia Fernandinha, O erro ocorre por causa do replicate. Que tipo de dado é manipulado nos campos HrRealizadas e MinRealizados? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Fernandinha Postado Março 22, 2012 Autor Denunciar Share Postado Março 22, 2012 Olá!São campos do tipo SMALLINT.Teria algum outro meio de eu unir esses dois campos no formato de horas? HH:MMObrigada. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Março 22, 2012 Denunciar Share Postado Março 22, 2012 Estava perguntando o tipo por que se conseguir substituir o replicate por outra função do sql com SUM, MAX, MIN, etc (ou até mesmo uma conversão), conseguirá realizar o total sem a necessidade de especificar os campos no group by. você utilizando o replicate, há a possibilidade de sua concatenação retornar mais de 1 linha de dados. Desta forma o sql necessita a especificação da coluna no agrupamento. Não tenho como postar um script pois não tenho exemplo dos dados manipulados.... caso queira postar... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Fernandinha Postado Março 22, 2012 Autor Denunciar Share Postado Março 22, 2012 As colunas da tabela que eu estou utilizando são essas:IdTurma HrRealizadas MinRealizados11195 12 011195 12 011195 12 011195 4 4511201 5 0 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Março 22, 2012 Denunciar Share Postado Março 22, 2012 Segue exemplo:CREATE TABLE #tabela (IdTurma INT, HrRealizadas INT, MinRealizados INT) INSERT INTO #tabela VALUES (11195, 12, 0) INSERT INTO #tabela VALUES (11195, 12, 0) INSERT INTO #tabela VALUES (11195, 12, 0) INSERT INTO #tabela VALUES (11195, 4, 45) INSERT INTO #tabela VALUES (11201, 5, 0) SELECT IdTurma, Total=CAST(SUM(HrRealizadas)AS VARCHAR)+':'+cast(SUM(MinRealizados) AS VARCHAR) FROM #tabela GROUP BY IdTurma Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Fernandinha Postado Março 22, 2012 Autor Denunciar Share Postado Março 22, 2012 Então Fulvio, dessa forma os resultados ficam assim:IdTurma Total11195 40:4511201 5:0Precisaria que eles retornassem assim:IdTurma Total11195 40:4511201 05:00Não sei se no lugar do replicate posso utilizar outra função.Obrigada! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Março 22, 2012 Denunciar Share Postado Março 22, 2012 Ahm.... rs.... agora entendi!!! Para estas situações, prefiro o case. Apesar da estrutura ficar maior, acho que fica mais legível. Segue script:CREATE TABLE #tabela (IdTurma INT, HrRealizadas INT, MinRealizados INT) INSERT INTO #tabela VALUES (11195, 12, 0) INSERT INTO #tabela VALUES (11195, 12, 0) INSERT INTO #tabela VALUES (11195, 12, 0) INSERT INTO #tabela VALUES (11195, 4, 45) INSERT INTO #tabela VALUES (11201, 5, 0) SELECT IdTurma, CASE len(CAST(SUM(HrRealizadas)AS VARCHAR)) WHEN 1 THEN '0' + CAST(SUM(HrRealizadas)AS VARCHAR) ELSE CAST(SUM(HrRealizadas)AS VARCHAR) END + ':' + CASE len(cast(SUM(MinRealizados) AS VARCHAR)) WHEN 1 THEN '0' + cast(SUM(MinRealizados) AS VARCHAR) ELSE cast(SUM(MinRealizados) AS VARCHAR) end AS Total FROM #tabela GROUP BY IdTurma Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Fernandinha Postado Março 22, 2012 Autor Denunciar Share Postado Março 22, 2012 Muito obrigada Fulvio!!! =) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Março 22, 2012 Denunciar Share Postado Março 22, 2012 De nada... precisando estamos ai!! :) Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Fernandinha
Olá pessoal!!
Tenho o seguinte select:
SELECT DISTINCT
Id,
TotalHoras = REPLICATE('0',2-LEN(HrRealizadas))+ CAST((SUM(HrRealizadas) % 60) AS VARCHAR(2)) + ':' + REPLICATE('0',2-LEN(MinRealizados))+ CAST((SUM(MinRealizados) % 60) AS VARCHAR(2))/*(sum(HrRealizadas)+sum(MinRealizados/60))*/
FROM FREQUENCIA
WHERE Id = 5
GROUP BY Id, HrRealizadas, MinRealizados
Ele está me retornando:
Id TotalHoras
11195 04:45
11195 36:00
Porém gostaria que ele me retornasse isso:
Id TotalHoras
11195 40:45
Alguém pode me dar um help, por favor?
Obrigada.
Editado por FernandinhaLink para o comentário
Compartilhar em outros sites
11 respostass a esta questão
Posts Recomendados
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.