Ver Mensaje Individual
  #3 (permalink)  
Antiguo 11/03/2013, 22:28
Avatar de gerardo_goh
gerardo_goh
 
Fecha de Ingreso: noviembre-2008
Mensajes: 107
Antigüedad: 16 años
Puntos: 1
Respuesta: rango por ventas y por zona

Hola que tal, creo que expuse el tema mal, lo que necesito es obtener el ranking de los mejores vendedores, pongo un ejemplo de excel:

http://jldexcelsp.blogspot.mx/2011/0...or-grupos.html

Esto es lo que llevo creado.

Código MySQL:
Ver original
  1. -- ============ PASO 1=============
  2. -- Crear una tabla temporal
  3. create table tblvta_alta as
  4.  
  5. select concat(a.id_trab,'-',a.nombre,'-',a.zona,'-',a.ventas)as key_2,a.id_trab,a.nombre,a.zona,a.tipo_incidencia,a.ventas,
  6.       ifnull(a.fec_inicial,'') fec_inicio,
  7.       ifnull(a.fec_final,'')fec_fin,
  8.       b.lugar,
  9.       if(a.fec_inicial,datediff(a.fec_final,a.fec_inicial)+1,' ')cant_dia_no_lab,
  10.       if(a.fec_final>a.dia_hoy,datediff(a.dia_hoy,a.fec_inicial)+1,' ')tot_dias_hoy,
  11.       a.dia_hoy
  12. from tblrango a
  13.  
  14.  
  15. (select b.zona,max(b.ventas) maxventas,(1) lugar
  16. from tblrango b
  17. group by b.zona
  18. order by b.zona asc) b
  19.  
  20. on  a.zona = b.zona
  21. and a.ventas=b.maxventas;
  22.  
  23. select * from tblvta_alta;
  24.  
  25.  
  26. -- ============ PASO 2 ==================
  27. -- Para determinar los días no laborados hasta el 2013-02-15 y el total de dias de incidencia diferente a trabaja
  28. create table tblfechas as
  29. select concat(a.id_trab,'-',a.nombre,'-',a.zona,'-',a.ventas)as key_1,a.zona,a.id_trab,a.nombre,a.tipo_incidencia,a.ventas,
  30.       ifnull(fec_inicial,'')as fecha_ini,
  31.       ifnull(fec_final,'')as fecha_fin,
  32.       if(a.fec_inicial,datediff(a.fec_final,a.fec_inicial)+1,' ')cant_dia_no_lab,
  33.       if(a.fec_final>a.dia_hoy,datediff(a.dia_hoy,a.fec_inicial)+1,' ')tot_dias_hoy
  34.  
  35.  
  36. from tblrango a;
  37.  
  38. select * from tblfechas;
  39.  
  40.  
  41. -- ============ Paso 3 ==================
  42. -- Unir tablas del paso 1 con la del paso 2
  43.  
  44. select a.id_trab,a.nombre,a.zona,a.tipo_incidencia,a.ventas,
  45. ifnull(b.lugar,'')lugar,a.fecha_ini,a.fecha_fin,a.cant_dia_no_lab,a.tot_dias_hoy,
  46. if(fecha_ini='','trabaja','descanso')ruta from tblfechas a
  47. left outer join tblvta_alta b
  48. on a.key_1=b.key_2
  49. order by a.zona asc,a.ventas desc;
  50.  
  51. -- el dia_hoy es: 2013-02-15 sobre esa fecha fueron los calculos de las columnas cant_dia_no_lab  y tot_dias_hoy
  52.  
  53. +---------+-----------+------+-----------------+--------+-------+------------+------------+-----------------+--------------+----------+
  54. | id_trab | nombre    | zona | tipo_incidencia | ventas | lugar | fecha_ini  | fecha_fin  | cant_dia_no_lab | tot_dias_hoy | ruta     |
  55. +---------+-----------+------+-----------------+--------+-------+------------+------------+-----------------+--------------+----------+
  56. | 00156   | ricardo   | 0015 | trabaja         |     30 | 1     |            |            |                 |              | trabaja  |
  57. | 00013   | armando   | 0015 | trabaja         |     25 |       |            |            |                 |              | trabaja  |
  58. | 04566   | gerardo   | 0015 | incapacidad     |     20 |       | 2013-02-15 | 2013-02-20 | 6               | 1            | descanso |
  59. | 02546   | jose      | 0120 | vacaciones      |     48 | 1     | 2013-02-10 | 2013-02-10 | 1               |              | descanso |
  60. | 01756   | francisco | 0120 | trabaja         |     30 |       |            |            |                 |              | trabaja  |
  61. | 15460   | pedro     | 3000 | trabaja         |     41 | 1     |            |            |                 |              | trabaja  |
  62. | 05630   | julian    | 3000 | trabaja         |     40 |       |            |            |                 |              | trabaja  |
  63. | 12222   | ulises    | 3000 | vacaciones      |     31 |       | 2013-02-12 | 2013-02-15 | 4               |              | descanso |
  64. | 09000   | pablo     | 3000 | trabaja         |     30 |       |            |            |                 |              | trabaja  |
  65. | 12300   | jonathan  | 3000 | incapacidad     |     30 |       | 2013-02-05 | 2013-03-05 | 29              | 11           | descanso |
  66. +---------+-----------+------+-----------------+--------+-------+------------+------------+-----------------+--------------+----------+
  67. 10 rows in set (0.00 sec)

Hasta el momento esto es lo que tengo me hace falta obtener los demas ranking de los vendedores por zona de acuerdo a las ventas generadas por cada zona.

Espero que me puedan ayudar.

Última edición por gerardo_goh; 12/03/2013 a las 08:11