Fazer SUM em campo data ? SQL

23/08/2007

Boa tarde Galera,

Estou com a seguinte dúvida, como não é possivel fazer um SUM em um campo Data, gostaria de pedir a ajuda dos amigos.
Preciso gerar um relatório, no qual o usuário podera inserir DataInicial e DataFinal, e preciso trazer no meu relatório o valor total do meu campo FC.MFurtada de cada dia, só lembrando que gravo Hora(2007-08-01 07:40:00.000) no meu banco.
Segue abaixo a principio e meu código.


SELECT
    SUM(FC.MFurtada) as TotalMesFurtada,
    FC.DataConstatacao
FROM
    FurtoCabo FC
    INNER JOIN Ocorrencia O ON (FC.Cod_Ocorrencia = O.Cod_Ocorrencia)
    INNER JOIN TipoCabo TC ON (FC.Cod_TipoCaboFurtado = TC.Cod_TipoCabo)
    INNER JOIN UF UF ON (O.Cod_UF = UF.Cod_UF)
    INNER JOIN Geo Geo ON (UF.Cod_Geo = Geo.Cod_Geo)
WHERE
    O.Deletado = 0
    AND
    FC.DataConstatacao >= ´01/08/2007´ + ´ ´ + ´00:00:00´ AND FC.DataConstatacao <= ´01/08/2007´ + ´ ´ + ´23:59:59´
GROUP BY
    FC.DataConstatacao


Abraço a todos.
Maic Nogueira


Maic.rio

Respostas

23/08/2007

Emerson

como você não informou o banco de dados, não dá pra saber se a instrução abaixo irá funcionar. de qualquer forma, faça um teste:
SELECT
    convert(datetime, cast(FC.DataConstatacao as varchar(11))) Dia,
    SUM(FC.MFurtada) as TotalMesFurtada
FROM
    FurtoCabo FC
    INNER JOIN Ocorrencia O ON (FC.Cod_Ocorrencia = O.Cod_Ocorrencia)
    INNER JOIN TipoCabo TC ON (FC.Cod_TipoCaboFurtado = TC.Cod_TipoCabo)
    INNER JOIN UF UF ON (O.Cod_UF = UF.Cod_UF)
    INNER JOIN Geo Geo ON (UF.Cod_Geo = Geo.Cod_Geo)
WHERE
    O.Deletado = 0
    AND
    FC.DataConstatacao >= ´01/08/2007´ + ´ ´ + ´00:00:00´ AND FC.DataConstatacao <= ´01/08/2007´ + ´ ´ + ´23:59:59´
GROUP BY
    convert(datetime, cast(FC.DataConstatacao as varchar(11)))



Responder Citar

23/08/2007

Maic.rio

Vlw Emerson, funcionou perfeitamente !
Estou utilizando SQL SErver 2005 !

Abraço...


Responder Citar

24/08/2007

Maic.rio

Galera,

Me tirem mais essa dúvida.
Anteriomente, a dúvida era sobre agrupar por dias.
Agora não estou conseguindo agrupar por mês !!
Como ficaria?

Forte abrço a todos !
Maic


Responder Citar

24/08/2007

Emerson

/* por dia */
SELECT
    convert(varchar(12), getdate(), 103) Dia,
    SUM(FC.MFurtada) as TotalMesFurtada
FROM
    FurtoCabo FC
    INNER JOIN Ocorrencia O ON (FC.Cod_Ocorrencia = O.Cod_Ocorrencia)
    INNER JOIN TipoCabo TC ON (FC.Cod_TipoCaboFurtado = TC.Cod_TipoCabo)
    INNER JOIN UF UF ON (O.Cod_UF = UF.Cod_UF)
    INNER JOIN Geo Geo ON (UF.Cod_Geo = Geo.Cod_Geo)
WHERE
    O.Deletado = 0
    AND
    FC.DataConstatacao >= ´01/08/2007´ + ´ ´ + ´00:00:00´ AND FC.DataConstatacao <= ´01/08/2007´ + ´ ´ + ´23:59:59´
GROUP BY
    convert(varchar(12), getdate(), 103)


/* por mes */
SELECT
    right(convert(varchar(12), getdate(), 103), 7) Mes,
    SUM(FC.MFurtada) as TotalMesFurtada
FROM
    FurtoCabo FC
    INNER JOIN Ocorrencia O ON (FC.Cod_Ocorrencia = O.Cod_Ocorrencia)
    INNER JOIN TipoCabo TC ON (FC.Cod_TipoCaboFurtado = TC.Cod_TipoCabo)
    INNER JOIN UF UF ON (O.Cod_UF = UF.Cod_UF)
    INNER JOIN Geo Geo ON (UF.Cod_Geo = Geo.Cod_Geo)
WHERE
    O.Deletado = 0
    AND
    FC.DataConstatacao >= ´01/08/2007´ + ´ ´ + ´00:00:00´ AND FC.DataConstatacao <= ´01/08/2007´ + ´ ´ + ´23:59:59´
GROUP BY
    right(convert(varchar(12), getdate(), 103), 7)



Responder Citar