Principales respuestas
Diseño del modelo de datos

Pregunta
-
Hola a todos!
Tengo la siguiente tabla de números de cuentas contables:
NºCuenta Descripción Area 64200000 Texto1 A1 63100000 Texto2 A1 75500000 Texto3 A2 60200000 Texto4 A3 60500000 Texto5 A2 Esta tabla se aplica para las cuentas pertenecientes a movimientos del 2017 o anteriores (<=2017). A partir del año 2018 (>=2018), la tabla tendrá estos valores diferentes del Area:
NºCuenta Descripción Area 64200000 Texto1 A1 63100000 Texto2 A1 75500000 Texto3 A2 60200000 Texto4 A2 60500000 Texto5 A2 ¿Cómo puedo hacer para que, cuando quiera filtrar por un año y un área, aplique y sume los importes de los números de las cuentas correspondientes en cada periodo?
Es decir, que si tengo esta tabla de movimientos:
Mov NºCuenta Año Importe 1 64200000 2017 100 2 64200000 2017 50 3 75500000 2017 25 4 60200000 2017 5 5 60500000 2017 10 6 64200000 2018 15 7 75500000 2018 20 8 60500000 2018 20 9 60500000 2018 50 10 60200000 2018 100 Muestre estos resultados:
Muchas gracias
martes, 14 de agosto de 2018 10:08
Respuestas
-
Al parecer necesitarias una tabla para la asignacion de area, cuenta y periodo.
T(Area, Desde, Hasta, Cuenta)
Pudiera simplificarse con solo el anio si la asignacion es aplicable a un anio por completo. Si la descripcion de la cuenta varia en dependencia del anio y area a la que soporata entonces agrega la descripcion.
T(Area, Anio, Cuenta)
select
T.area, T.anio, sum(importe) as sum_importe
from
movimientos as M
inner join T
on T.anio = M.anio and T.area = M.area
group by
T.cuenta, T.anio;Me pregunto si tienes una tabla para las areas.
AMB
Some guidelines for posting questions...
AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas- Propuesto como respuesta Pablo RubioModerator martes, 14 de agosto de 2018 16:00
- Marcado como respuesta Pablo RubioModerator miércoles, 15 de agosto de 2018 21:02
martes, 14 de agosto de 2018 11:53 -
*****
Creo que habría que encontrar la manera de relacionar las Areas con las Cuentas y los Años y solamente especificar los cambios de áreas, es decir, que si de las 1000 cuentas solo cambian de área 3 para un determinado año, que solamente se tenga que configurar esos cambios.
*****
Como sabes que hubo un cambio si no tienes contra que comparar. Si no haces la asignacion de forma materializada, tarde o temprano te veraz haciendola en el codigo.
- Cual es la asignacion inicial?
- Cuantos anios han pasado desde la primera asignacion area / anio / cuenta?
- Que pasa si no hay entradas en la tabla movimientos para un anio / area / cuenta en especifico?
- Como saber que una asignacion cambio y contra que comprobar?
Todas esas preguntas tendras que contestarlas al vuelo y en cada codigo que lo nesecite.
Areas()
Cuentas()
Anios()
AsignacionAnual(AreaID, CuentaID, Anio)No he incluido testricciones de unicidad y/o clave primaria sin saber que una cuenta pudiera afectar multiples areas, etc.
AMB
Some guidelines for posting questions...
AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas- Marcado como respuesta Pablo RubioModerator miércoles, 15 de agosto de 2018 21:03
martes, 14 de agosto de 2018 15:32
Todas las respuestas
-
Al parecer necesitarias una tabla para la asignacion de area, cuenta y periodo.
T(Area, Desde, Hasta, Cuenta)
Pudiera simplificarse con solo el anio si la asignacion es aplicable a un anio por completo. Si la descripcion de la cuenta varia en dependencia del anio y area a la que soporata entonces agrega la descripcion.
T(Area, Anio, Cuenta)
select
T.area, T.anio, sum(importe) as sum_importe
from
movimientos as M
inner join T
on T.anio = M.anio and T.area = M.area
group by
T.cuenta, T.anio;Me pregunto si tienes una tabla para las areas.
AMB
Some guidelines for posting questions...
AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas- Propuesto como respuesta Pablo RubioModerator martes, 14 de agosto de 2018 16:00
- Marcado como respuesta Pablo RubioModerator miércoles, 15 de agosto de 2018 21:02
martes, 14 de agosto de 2018 11:53 -
Hola Hunchback y gracias por tu respuesta,
Si tengo una tabla para las Areas pero tu solución no me parece adecuada, me explico: en la tabla de Cuentas contables, tengo 1000 registros, cada uno con un número de cuenta diferente. En la tabla de Areas tengo 12 áreas y los años van del 2012 hasta la actualidad y los que vengan. Si tengo que crear la tabla que comentas, tendré que repetir los 1000 registros de cuentas por los diferentes años y asignarles su área para cada año y eso, no lo veo adecuado.
Creo que habría que encontrar la manera de relacionar las Areas con las Cuentas y los Años y solamente especificar los cambios de áreas, es decir, que si de las 1000 cuentas solo cambian de área 3 para un determinado año, que solamente se tenga que configurar esos cambios. No se si me explico o si es posible lo que comento.
Gracias.
- Editado raulsang martes, 14 de agosto de 2018 13:49
martes, 14 de agosto de 2018 13:49 -
*****
Creo que habría que encontrar la manera de relacionar las Areas con las Cuentas y los Años y solamente especificar los cambios de áreas, es decir, que si de las 1000 cuentas solo cambian de área 3 para un determinado año, que solamente se tenga que configurar esos cambios.
*****
Como sabes que hubo un cambio si no tienes contra que comparar. Si no haces la asignacion de forma materializada, tarde o temprano te veraz haciendola en el codigo.
- Cual es la asignacion inicial?
- Cuantos anios han pasado desde la primera asignacion area / anio / cuenta?
- Que pasa si no hay entradas en la tabla movimientos para un anio / area / cuenta en especifico?
- Como saber que una asignacion cambio y contra que comprobar?
Todas esas preguntas tendras que contestarlas al vuelo y en cada codigo que lo nesecite.
Areas()
Cuentas()
Anios()
AsignacionAnual(AreaID, CuentaID, Anio)No he incluido testricciones de unicidad y/o clave primaria sin saber que una cuenta pudiera afectar multiples areas, etc.
AMB
Some guidelines for posting questions...
AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas- Marcado como respuesta Pablo RubioModerator miércoles, 15 de agosto de 2018 21:03
martes, 14 de agosto de 2018 15:32