Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Tirar agrupamento


Fernandinha

Question

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.

Edited by Fernandinha
Link to comment
Share on other sites

11 answers to this question

Recommended Posts

  • 0

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

Link to comment
Share on other sites

  • 0

Bom dia Fulvio!

Então, dessa forma eu já havia tentado, mas dá o seguinte erro:

Msg 8120, Level 16, State 1, Line 2

Column '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 2

Column 'FREQUENCIA.MinRealizados' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Link to comment
Share on other sites

  • 0

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...

Link to comment
Share on other sites

  • 0

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

Link to comment
Share on other sites

  • 0

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

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...