Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/11/2012, 10:02
goransh_pc
 
Fecha de Ingreso: junio-2011
Mensajes: 80
Antigüedad: 12 años, 10 meses
Puntos: 8
Duda self join

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

Última edición por goransh_pc; 09/11/2012 a las 10:12