Ir al contenido


Foto

Consulta de campos calculados


  • Por favor identifícate para responder
3 respuestas en este tema

#1 amell2020

amell2020

    Advanced Member

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

Escrito 09 mayo 2015 - 10:35

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 mensajes
  • LocationMar del Plata / Bs As / Argentina

Escrito 11 mayo 2015 - 03:43

¿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 mensajes
  • LocationEn un solo Lugar

Escrito 12 mayo 2015 - 07:24

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
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 12 mayo 2015 - 11:06

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.