Dividir entre filas de una tabla |
Responder
|
| Autor | ||
pepecasique
Nuevo
Unido: 19/Julio/2023 Localización: caracas Estado: Sin conexión Puntos: 1 |
Opciones de entrada
Gracias(0)
Cita Respuesta
Tema: Dividir entre filas de una tablaEnviado: 19/Julio/2023 a las 01:16 |
|
|
Saludos a todos! Tengo una tabla con unos 1000 registros entre los cuales tengo IdOperacion (clave unica), fecha y precio. Necesito dividir el precio del campo precio correspondiente al IdOperacion 3 entre el correspondiente al IdOperacion 2, sea mediante sql, vba o campo calculado y asi hasta el registro 1000. Mis conocimientos alcanzan hasta hacer esto : SELECT IdOperacion, Fecha, Open, (SELECT Open FROM Operaciones WHERE IdOperacion = IdOperacion - 1) / Open AS Resultado FROM Operaciones Pero con eso obtengo este error: "Ha escrito una subconsulta que puede devolver mas de un campo sin utilizar la palabra reservada EXISTS en la clausula FROM de la consulta principal. Corrija la instruccion SELECT de la subconsutla para solicitar un unico campo " y de alli no he podido pasar. Agradezco de antemano cualquier comentario Trabajo con Access 2016 32 bits
|
||
![]() |
||
Antonalo
Asiduo
Unido: 06/Noviembre/2009 Localización: España Estado: Sin conexión Puntos: 478 |
Opciones de entrada
Gracias(0)
Cita Respuesta
Enviado: 24/Julio/2023 a las 11:08 |
|
|
Yo trataría de averiguar cual es el precio del registro anterior mediante DLookup("Precio", "Operaciones", "IdOperacion =" & (Me.IdOperacion - 1)) y luego dividiría el precio del registro actual entre el valor hallado mediante la expresión anterior Sin embargo, veo el problema de que si eliminas un registro, el siguiente, si fuera autonumérico, no va a encontrar me.IdOperacion -1. |
||
![]() |
||
Juanmasp
Habitual
Unido: 21/Abril/2006 Estado: Sin conexión Puntos: 122 |
Opciones de entrada
Gracias(0)
Cita Respuesta
Enviado: 24/Julio/2023 a las 14:46 |
|
|
Yo lo haría así (lo escribo directamente sin probar)
SELECT IdOperacion, Fecha, Open, Open / OpenAnterior AS Resultado FROM Operaciones INNER JOIN (SELECT IdOperacion AS IdAnterior, Open AS OpenAnterior FROM Operaciones) AS OpAnterior ON IdOperacion = IdAnterior - 1 Las operaciones que no tengan una operación anterior, no se mostrarán (para eso habría que cambiar un par de cosas) Espero que te sirva
|
||
![]() |
||
lunasoft
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Habitual
Unido: 04/Noviembre/2014 Localización: Graz Estado: Sin conexión Puntos: 100 |
Opciones de entrada
Gracias(1)
Cita Respuesta
Enviado: 25/Julio/2023 a las 11:22 |
|
|
Buenos días:
la respuesta a tu duda la encuentras en: Tecsys Proyectos Informáticos S.L. (accessaplicaciones.com) Si utilizas subconsultas, el proceso se va a ralentizar una barbaridad. Mihura propone usar una función para realizar estas operaciones. La función en tu caso sería esta:
El uso de Static te permite almacenar el valor del registro anterior. y con los if devolvemos 0 en caso de desbordamiento (divisiones nulas) Para que funcione correctamente, debemos usar una consulta con un primer registro NULO que inicialice la variable static. Por eso en el sql comenzaremos con un where 1=0 UNION y la consulta en sí. La consulta sql quedaría así:
Termino diciendo que en el fondo la respuesta es de Mihura, que se ha molestado en leer tu pregunta y guiarme para llegar a la respuesta correcta con fines didácticos, ya que tenía interés por aprender este tipo de lógica. MUUUUUUUchas gracias maestro.
|
||
|
Juanjo Luna (Lunasoft)
Microsoft MVP 2023 ---------------- https://www.luna-soft.es/ https://www.youtube.com/ACCESSoTOTAL https://github.com/ACCESSoTOTAL |
||
![]() |
||
Responder
|
|
|
Tweet
|
| Ir al foro | Permisos de foro ![]() Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |