Hola amigos, tengo el siguiente escenario.
tabla
Código:
movimientos descripcion
|--------------------------| |--------------------------|
| id | total | flag | code | | code | nombre | peso |
|--------------------------| |--------------------------|
| 1 | 10 | 1 | 5 | | 5 | articulo_1 | 20 |
|--------------------------| |--------------------------|
| 2 | 20 | 1 | 5 | | 6 | articulo_2 | 30 |
|--------------------------| |--------------------------|
| 3 | 10 | 1 | 5 |
|--------------------------| ordenes
| 4 | 40 | 0 | 5 | |---------------------------------|
| -------------------------| | id | orden | date | code |
| 5 | 10 | 1 | 6 | |--------------------------|------|
|--------------------------| | 1 | 23 | 2012-10-10 | 5 |
| 6 | 10 | 1 | 6 | |--------------------------|------|
|--------------------------| | 2 | 74 | 2011-08-23 | 6 |
| 7 | 10 | 1 | 6 | |--------------------------|------|
|--------------------------|
| 8 | 80 | 0 | 6 |
|--------------------------|
Breve descripcion.
Tabla movimientos: Movimientos de ordenes
Tabla descripcion: Datos de los articulos
Tabla ordenes: la ordenes
Dentro de movimiento esta con el Flag = 1 los articulos ke se movieron para esa orden identificada por code
Con flag 0 cantidad de elemtos ke se fueron en esa orden NO es igual a la suma de los articulos para esa orden
Mi meta es obtener:
1- Totales sumados cuando sean el mismo Code y el FLAG = 1 en la tabla movimientos
2- Compararlo con el Total cuando sea el mismo Code pero con Flag = 0 multiplicado por el peso en la tabla descripcion
3- Diferencia de la Comparacion
mi pregunta es: Este query ke he creado es optimo para este escenario a existe una mejor opcion ke me puedan brindar
Código:
SELECT
D.code AS Codigo_Producto,
D.nombre AS Descripcion_Producto,
D.peso AS Peso_Producto,
O.date AS Orden_Fecha,
O.orden AS Orden_Codigo,
SUM(M.total) AS Peso_Movido,
( M2.total * D.peso ) AS Peso_Vendido,
( M2.total * D.peso ) - SUM( M.total ) Diferencia
FROM
descripcion D
INNER JOIN moviminetos M ON D.code = M.code
INNER JOIN moviminetos M2 ON D.code = M2.code
INNER JOIN ordenes O ON M.code = O.code
WHERE
M.flag = 1
M2.flag = 0
GROUP BY
M.code,
M.flag,
D.nombre,
D.peso,
O.date,
O.orden
Este query me devuelve el valor perfecto pero mi duda es si esta linea esta bien construida bajo un concepto optimo
INNER JOIN moviminetos M ON D.code = M.code
INNER JOIN moviminetos M2 ON D.code = M2.code
para poder diferenciar un flag = 1 y el otro = 0
Muchas Gracias