Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

consulta con fila Null

Estas en el tema de consulta con fila Null en el foro de Mysql en Foros del Web. HOla, tengo un problemilla y la vdd ya llevo dias atorado en esto. Estoy intentando hacer una consulta que me devuelva los pedidos de un ...
  #1 (permalink)  
Antiguo 19/10/2009, 05:51
 
Fecha de Ingreso: agosto-2007
Mensajes: 3
Antigüedad: 17 años, 3 meses
Puntos: 0
consulta con fila Null

HOla, tengo un problemilla y la vdd ya llevo dias atorado en esto. Estoy intentando hacer una consulta que me devuelva los pedidos de un cliente de los ultimos 3 meses, pero agrupados por mes, es decir, cuantos pedidos hizo en Enero, cuantos en Febrero y cuantos en Marzo, suponiendo que el mes actual es Marzo. Esto lo tengo hecho si el cliente ha hecho pedidos en los 3 meses, pero mi problema es cuando el cliente en Febrero no hizo pedidos, la consulta me devuelve pedidos de Enero y Marzo, pero quiero que me muestre tambien Febrero pero con valor nulo o 0 en el numero de pedidos.

Espero puedan ayudarme, envio la consulta.

select count(*) as Pedidos,
Case
when month(date_purchased) = 1 then 'Ene'
when month(date_purchased) = 2 then 'Feb'
when month(date_purchased) = 3 then 'Mar'
when month(date_purchased) = 4 then 'Abr'
when month(date_purchased) = 5 then 'May'
when month(date_purchased) = 6 then 'Jun'
when month(date_purchased) = 7 then 'Jul'
when month(date_purchased) = 8 then 'Ago'
when month(date_purchased) = 9 then 'Sep'
when month(date_purchased) = 10 then 'Oct'
when month(date_purchased) = 11 then 'Nov'
when month(date_purchased) = 12 then 'Dic'
End Mes
From Orders
where customers_id = '1' and
(month(date_purchased) >= month(subdate(curdate(),interval 2 month)))
Group by month(date_purchased) Limit 3

De antemano muchas gracias.
Saludos
  #2 (permalink)  
Antiguo 19/10/2009, 15:28
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: consulta con fila Null

Crea una tablameses con los nombres de los doce meses en el campo mes y su número en el campo numeromes, campo de tipo INT (ya sabes, de 1 a 12) y haz un LEFT JOIN del tipo
Código sql:
Ver original
  1. SELECT m.mes,COUNT(*) pedidos FROM tablameses m
  2.  LEFT JOIN Orders o ON m.numeromes = MONTH(o.date_purchased)
  3. WHERE o.customers_id = 1 AND
  4. (MONTH(o.date_purchased) >= MONTH(SUBDATE(CURDATE(),INTERVAL 2 MONTH)))
  5. GROUP BY o.numeromes
No he probado nada
  #3 (permalink)  
Antiguo 19/10/2009, 16:29
 
Fecha de Ingreso: enero-2008
Ubicación: Lima - Perú
Mensajes: 1.127
Antigüedad: 16 años, 10 meses
Puntos: 10
Respuesta: consulta con fila Null

Tio hace tiempo alguien tenia un problema similar y se soluciono con un if te dejo un ejemplo seguro con eso resulves, aunque no se si iff corra en mysql ya que lo utilizaron en access

Esta consulta recupera los codcat del 01 al 03 y coloca en negativo los valores del codcat=03
sintaxis:
IIF(condicion,verdadero,falso)

Código:
SELECT CodProd, NomProd, CodCat, IIf(codcat='03',(-0)-precioventa,precioventa) as NUEVO_NOMBRE
FROM Producto
WHERE codcat Between '01' And '03'
  #4 (permalink)  
Antiguo 19/10/2009, 16:39
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: consulta con fila Null

Cita:
Iniciado por franko1809 Ver Mensaje
Tio hace tiempo alguien tenia un problema similar y se soluciono con un if te dejo un ejemplo seguro con eso resulves, aunque no se si iff corra en mysql ya que lo utilizaron en access

Esta consulta recupera los codcat del 01 al 03 y coloca en negativo los valores del codcat=03
sintaxis:
IIF(condicion,verdadero,falso)

Código:
SELECT CodProd, NomProd, CodCat, IIf(codcat='03',(-0)-precioventa,precioventa) as NUEVO_NOMBRE
FROM Producto
WHERE codcat Between '01' And '03'
La función en MySQL es IF(condición, verdadero, falso); pero este caso no te sirve porque debes partir de que no sabes de antemano qué mes o meses un cliente o clientes pueden no haber adquirido productos. En ese contexto, deberías hacer una consulta por cada mes para poder tener todas las variantes posibles. Demasiado complejo, ya que en el ejemplo que das, lo que puede que no se de es uno de los meses, más de uno o todos, por lo tanto la forma más simple en SQL es crear una tabla temporal con los numeros de los meses y usarla para agruparlos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:42.