SQL - Traer mes

 
Vista:

Traer mes

Publicado por Damian (26 intervenciones) el 06/10/2008 21:15:38
En un select me interesa traer nada mas el mes pero no el numero sino que me diga "Enero" por ejemplo y no mes 1, las fechas las tengo cargadas como datetime.
La idea es que yo quiero traer los totales facturados por mes segun el año que elija el usuario, no se si hay una funcion para traer el mes desde el select mismo como yo quiero o lo tengo que hacer desde el codigo de VB.NET, tambien voy a necesitar traer el año para que me busque todos los meses que se facturaron según el año seleccionado. Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Traer mes

Publicado por pacopaz (143 intervenciones) el 06/10/2008 21:56:27
No queda más que programar el query. Sin embargo, no sé que motor de base de datos ocupas. En el caso de sql server, sería con un case when y para oracle con un decode.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Traer mes

Publicado por Damian (26 intervenciones) el 06/10/2008 22:17:37
Uso sql server 2005 en ingles pero el tema es que tengo que agrupar por mes y sumar el total en dos tablas, porque las fechas que quiero traer las tengo una en Facturacion y otra en Pedidos, yo la consulta la realice preguntando por el mes y usando un or para que me traiga por ejemplo Enero de ambas tablas(Facturacion y Pedidos) y sus totales. Me parece que es mucho pedir para una consulta y si ultilizo union separando ambas tablas me va a quedar repetido los meses. Esta es la consulta de los primeros 3 meses por ejemplo.

Select case when month(F.FechaHora)=1 or month(P.FechaPed)=1 then 'ENERO'
when month(F.FechaHora)=2 then 'FEBRERO'
when month(F.FechaHora)=3 then 'MARZO' END [Mes]
,sum(F.TotalFact+P.TotalPed)as[Total Mes] from Facturacion F,Pedidos P
where (F.Comprobante='FA' or F.Comprobante='ND') and P.Facturado='NO' group by F.FechaHora order by 2 desc,1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Traer mes

Publicado por pacopaz (143 intervenciones) el 07/10/2008 01:19:43
Ok, vamos por partes. Si agrupas por fecha, te va a traer las sumas por cada día (o por cada segundo, según sea el caso. Tienes que agrupar por mes y por año.

group by Year(F.FechaHora), Month(F.FechaHora)

luego, También tendrías que hacer lo mismo con la fecha de Pedidos, para que te ofrezca dados correctos.
Además, deberías relacionar (por lo menos así) Facturación y Pedidos:

where Year(F.FechaHora) = Year(P.FechaHora) and Month(F.FechaHora) = Month(P.FechaHora)

Estoy asumiendo que en Pedidos el campo se llama igual que en Facturas.

Sin embargo, esto debería quedar en un join, para que traiga de mejor forma los datos y que esto no haga que desaparezcan algunos. En total, una solución como esta:

select
year(F.FechaHora) [Año],
case Month(F.FechaHora)
when 1then 'Enero'
when 2 then 'Febrero'
when 3 then 'Marzo'
...
when 12 then 'Diciembre'
end [Mes],
sum(F.TotalFact + IsNull(P.TotalPed, 0)) [Total Mes]
from Facturacion F left join Pedidos P on Year(F.FechaHora) = Year(P.FechaHora) and Month(F.FechaHora) = Month(P.FechaHora) and (F.Comprobante='FA' or F.Comprobante='ND') and P.Facturado='NO'
order by year(F.FechaHora), Month(F.FechaHora)

Espero que te sirva.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Traer mes

Publicado por Damian (26 intervenciones) el 07/10/2008 03:49:12
Gracias por la ayuda la consulta esta bien pero te olvidaste del group by y ademas me estoy fijando y los totales que me trae no son los esperados y por lo que veo el problema esta cuando tiene que sumar totales de ambas tablas.
Porque pones el IsNull(P.TotalPed, 0) o poruqe no ponerlo en IsNull(F.TotalFact, 0). Gracias de nuevo por la ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar