Grupo By com Cláusula Where - Firebird 2

08/09/2020

0

Bom dia Amigos,

Ainda não consegui compreender o conceito, por este motivo , peço a ajuda de vcs ... Estou com uma outra query , onde tenho por objetivo fazer uma soma total de um determinado campo e a partir dessa soma criar a estratégia de regras na aplicação ... Porém , quando coloca o "SUM" na tabela e o group by .. o mesmo não retorna o esperado..

Pode me ajudar ?


SELECT
SUM(A.QTDE_ENTREGAS) As TOTAL_ENTREGAS,
A.PESO,
A.ID_VIAGEM,
A.EMPRESA,
A.NOTA,
A.QTDE_ENTREGAS,
A.ORIGEM,
A.DESTINO,
A.QUANTIDADE,
A.TOTAL_FRE,
A.VALOR_PRODUTO,
A.DISTANCIA_PERCORRIDA,
(CASE
WHEN (SUM(A.QTDE_ENTREGAS) <= 150) THEN 1.00
WHEN (SUM(A.QTDE_ENTREGAS) BETWEEN 151 AND 180) THEN 2.50
WHEN (SUM(A.QTDE_ENTREGAS) BETWEEN 181 AND 220) THEN 3.00
WHEN (SUM(A.QTDE_ENTREGAS) > 221) THEN 4.00
ELSE 0
END) * SUM(A.QTDE_ENTREGAS) AS VLR_BONUS_QTDENTREGA,
B.ID,
B.NUMERO,
B.DATA,
D.PLACA,
D.DESCRICAO,
D.ID_TIPOVEICULO,
B.COMISSAO,
B.VALPAGMOT,
B.OBS,
B.HORA_INCLUSAO,
B.USUARIO,
B.ID_MOTORISTA,
CASE
WHEN (M.OBS LIKE ('%MOTORISTA BAÚ%')) THEN 'BAU'
ELSE 'FROTA'
END As TIPO_MOT,
M.ID,
M.EMPRESA,
M.NOME,
M.CPF,
C.ID,
C.DATASAIDA,
C.HORASAIDA,
C.DATACHEGA,
C.HORACHEGA,
DATEDIFF(DAY FROM C.DATASAIDA TO CAST(C.DATACHEGA AS DATE)) As DIAS_VIAG,
(C.HORACHEGA - C.HORASAIDA) / 3600 As Horas,
CASE
WHEN (C.HORACHEGA - C.HORASAIDA) / 3600 between 12 and 23.9 THEN
(DATEDIFF(DAY FROM C.DATASAIDA TO CAST(C.DATACHEGA AS DATE)) + 1)
WHEN (C.HORACHEGA - C.HORASAIDA) / 3600 between 24 and 47.9 THEN
(DATEDIFF(DAY FROM C.DATASAIDA TO CAST(C.DATACHEGA AS DATE)) + 2)
ELSE (DATEDIFF(DAY FROM C.DATASAIDA TO CAST(C.DATACHEGA AS DATE)))
END As DIAS_MAIS_HORAS,
C.COMISSAO,
C.KM_INICIAL,
C.KM_FINAL,
(C.KM_FINAL - C.KM_INICIAL) AS KM_TOTAL,
C.DESP_PAGAS,
C.TOT_DESP,
C.TOT_FRETE,
C.LUCRO,
C.VAL_COM,
C.USUARIO_ALTERACAO,
C.USUARIO

FROM
ENTREGAS A INNER JOIN VIAGENS C ON A.ID_VIAGEM = C.ID
INNER JOIN ACERTOS B ON B.ID = C.ID_ACERTO
INNER JOIN CAMINHOES D ON C.ID_VEICULO = D.ID
INNER JOIN MOTORISTAS M ON B.ID_MOTORISTA = M.ID


WHERE M.ID = 16
AND B.DATA BETWEEN ('25.07.2020') AND ('26.08.2020')
AND A.EMPRESA IN ('1','2','4','5')
AND B.EMPRESA IN ('1','2','4','5')
AND C.EMPRESA IN ('1','2','4','5')
AND M.SITUACAO = 'A'
AND A.QTDE_ENTREGAS IS NOT NULL

GROUP BY
A.PESO,
A.ID_VIAGEM,
A.EMPRESA,
A.NOTA,
A.QTDE_ENTREGAS,
A.ORIGEM,
A.DESTINO,
A.QUANTIDADE,
A.TOTAL_FRE,
A.VALOR_PRODUTO,
A.DISTANCIA_PERCORRIDA,
A.QTDE_ENTREGAS,
B.ID,
B.NUMERO,
B.DATA,
D.PLACA,
D.DESCRICAO,
D.ID_TIPOVEICULO,
B.COMISSAO,
B.VALPAGMOT,
B.OBS,
B.HORA_INCLUSAO,
B.USUARIO,
B.ID_MOTORISTA,
M.OBS,
M.ID,
M.EMPRESA,
M.NOME,
M.CPF,
C.ID,
C.DATASAIDA,
C.HORASAIDA,
C.DATACHEGA,
C.HORACHEGA,
C.DATASAIDA,
C.HORACHEGA,
C.HORACHEGA,
C.COMISSAO,
C.KM_INICIAL,
C.KM_FINAL,
C.KM_FINAL,
C.DESP_PAGAS,
C.TOT_DESP,
C.TOT_FRETE,
C.LUCRO,
C.VAL_COM,
C.USUARIO_ALTERACAO,
C.USUARIO
Victor Andrade

Victor Andrade

Responder

Posts

14/10/2020

Leandro Chiodini

Bom dia Victor Andrade

Tudo certo, algo de estranho tem no teu Select
Repare que a clausula Group By esta listando alguns campos mais de 1 vez,
O interessante seria você informar o que esta errado somente seu calculo?
Qual seria o objetivo total do seu Select?

Como você esta agrupando nesse caso por datas pode dar uma grande diferença visto que quando você agrupa ele somente agrupara os valores iguais.

O ideal seria para esse tipo de calculo não buscar todas as informações para serem tratadas em uma possível Grid e caso isso seja necessário, precisa dar uma olhada em como seria este componente se ´precisara destas informações e se realmente eles precisam ser agrupadas assim por datas como você esta fazendo.

Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar