Array
(
)

Fazer SUM em campo data ? SQL

Maic.rio
   - 23 ago 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.

#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

Emerson
   - 23 ago 2007

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:
#Código

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


Maic.rio
   - 23 ago 2007

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

Abraço...

Maic.rio
   - 24 ago 2007

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

Emerson
   - 24 ago 2007

#Código

/* 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)


#Código
/* 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)