Jump to content


Photo

Consulta de campos calculados


  • Please log in to reply
3 replies to this topic

#1 amell2020

amell2020

    Advanced Member

  • Miembros
  • PipPipPip
  • 340 posts
  • LocationEn un solo Lugar

Posted 09 May 2015 - 10:35 PM

hola amigos estoy trantando de hacer una consulta donde estan relacionadas dos tablas, esta es la  descripcion:

 

Tengo una tabla llamada Ordenes con un campo llamado Total y una tabla llama detalle la cual tiene un campo llamado costo. resulta amigos que yo quiero sacar la ganancia con una consulta de restar el suma total menos suma costo que seria la ganancia total de la mercancia.

 

estoy utilizando esta consulta la cual me muestra un error al ejecutarlo:


delphi
  1. select sum(total),
  2. sum(ordenes.total) - sum(`item_orden`.cant * item_orden.costo)as Ganancia
  3. from item_orden
  4. LEFT JOIN ordenes ON ordenes.id_ordenes = item_orden.id_orden
  5. where ordenes.condicion = 'Efectivo'

le dejo una imagen del error que me da, bueno eso es todo. gracias


  • 0

#2 Nikolas

Nikolas

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 604 posts
  • LocationMar del Plata / Bs As / Argentina

Posted 11 May 2015 - 03:43 PM

¿no tenes en precio de venta en la tabla item_orden? lo deberias calcular desde alli, digo porque en la cabecera de la orden el total, puede sumar valores que no son ganancia, por ejemplo: impuestos o recargos por medio de pago.


  • 0

#3 amell2020

amell2020

    Advanced Member

  • Miembros
  • PipPipPip
  • 340 posts
  • LocationEn un solo Lugar

Posted 12 May 2015 - 07:24 AM

muy buena sugerencia amigo 

Nikolas

muestro las tablas que tengo en mysql


sql
  1. Tabla ordenes:
  2. CREATE TABLE `ordenes` (
  3. `id_ordenes` INT(11) NOT NULL AUTO_INCREMENT,
  4. `id_cliente` INT(11) DEFAULT NULL,
  5. `condicion` VARCHAR(23) DEFAULT NULL,
  6. `idTurno` INT(11) NOT NULL,
  7. `IDUsuario` INT(11) DEFAULT NULL,
  8. `estado` tinyint(1) DEFAULT '0',
  9. `total` FLOAT(9,3) DEFAULT NULL,
  10. `Fecha` DATE DEFAULT NULL,
  11. `Hora` VARCHAR(20) DEFAULT NULL,
  12. `tipo` INT(11) DEFAULT NULL,
  13. PRIMARY KEY (`id_ordenes`),
  14. KEY `id_cliente` (`id_cliente`),
  15. KEY `IDUsuario` (`IDUsuario`),
  16. CONSTRAINT `ordenes_fk` FOREIGN KEY (`id_cliente`) REFERENCES `clientes` (`id_cliente`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  17. CONSTRAINT `ordenes_fk2` FOREIGN KEY (`IDUsuario`) REFERENCES `usuario` (`ID_usuario`) ON DELETE NO ACTION ON UPDATE NO ACTION
  18. ) ENGINE=InnoDB AUTO_INCREMENT=9186 DEFAULT CHARSET=latin1;
  19. /*!40101 SET character_set_client = @saved_cs_client */;
  20.  
  21. y la de detalle llamada item_orden
  22. CREATE TABLE `item_orden` (
  23. `id_item_orden` INT(11) NOT NULL AUTO_INCREMENT,
  24. `id_orden` INT(11) DEFAULT NULL,
  25. `id_articulo` INT(11) DEFAULT NULL,
  26. `cant` DOUBLE(6,3) DEFAULT NULL,
  27. `Fecha` DATE DEFAULT NULL,
  28. `precio_unidad` DOUBLE(15,3) DEFAULT NULL,
  29. `Descuento` INT(11) DEFAULT '0',
  30. `imp` FLOAT(9,3) DEFAULT '0.000',
  31. `costo` FLOAT(9,3) NOT NULL,
  32. PRIMARY KEY (`id_item_orden`),
  33. KEY `id_orden` (`id_orden`),
  34. KEY `id_articulo` (`id_articulo`),
  35. CONSTRAINT `item_orden_fk1` FOREIGN KEY (`id_articulo`) REFERENCES `articulos` (`id_articulos`) ON DELETE NO ACTION ON UPDATE NO ACTION
  36. ) ENGINE=InnoDB AUTO_INCREMENT=13973 DEFAULT CHARSET=latin1;
  37. /*!40101 SET character_set_client = @saved_cs_client */;


  • 0

#4 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2092 posts
  • LocationRepública Dominicana

Posted 12 May 2015 - 11:06 AM

Saludos.

 

¿Cual es el error? No se visualiza la imagen. De entrada olvidaste poner ordenes.total en tu primer SUM.

 

Creo que hay una falla en las estructuras tanto en ordenes y item_orden.

 

En la tabla Ordenes el campo total acepta valores null y en item_orden el campo cant también acepta valores null, sin embargo el campo costo no.

 

Te sugiero que cambies los campos a que no soporten nulos y tengan un valor por defecto.

 

Así tu consulta traerá siempre valores aunque sean en cero, si lo anterior no es posible entonces busca una función alterna a IsNull de SQL Server para el motor de datos que usas y quedaría algo como:


sql
  1. SELECT SUM(IsNull(total,0)) total,
  2. SUM(IsNull(ordenes.total,0)) - SUM(IsNull(`item_orden`.cant, 0) * item_orden.costo)AS Ganancia
  3. FROM item_orden
  4. LEFT JOIN ordenes ON ordenes.id_ordenes = item_orden.id_orden
  5. WHERE ordenes.condicion = 'Efectivo'


  • 0




IP.Board spam blocked by CleanTalk.