Ver Mensaje Individual
  #10 (permalink)  
Antiguo 11/09/2014, 04:31
GeriReshef
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 12 años, 4 meses
Puntos: 40
Respuesta: Problemas consultas, conteos, porcentajes

Espero que te entendí: tenemos que coincidir cada consulta de un comprador con la siguiente:
si no existe la siguiente- es "buena"
si existe una pero paso más de un mes- es "buena"
si existe una pero paso menos de un mes- es "mala".

Para coincidir cada consulta con la siguiente- utilizo este código:
Código SQL:
Ver original
  1. WITH Ta AS
  2. (SELECT ROW_NUMBER() OVER(Partition BY Comprador ORDER BY Fecha) N,
  3.         *
  4. FROM    #T)
  5. SELECT  *
  6. FROM    Ta T1
  7. LEFT JOIN Ta T2
  8.         ON T1.Comprador=T2.Comprador
  9.         AND T1.N=T2.N-1;

Para obtener las calificaciones de "buena" y "mala"-
Código SQL:
Ver original
  1. WITH Ta AS
  2. (SELECT ROW_NUMBER() OVER(Partition BY Comprador ORDER BY Fecha) N,
  3.         *
  4. FROM    #T)
  5. SELECT  T1.Consultor,
  6.         T1.Comprador,
  7.         T1.Fecha Fecha1,
  8.         T2.Fecha Fecha2,
  9.         CASE WHEN T2.Fecha IS NULL THEN 'Buena'
  10.             WHEN DateDiff(DAY,T1.Fecha,T2.Fecha)>=31 THEN 'Buena'
  11.             ELSE 'Mala'
  12.             END Calificacion
  13. FROM    Ta T1
  14. LEFT JOIN Ta T2
  15.         ON T1.Comprador=T2.Comprador
  16.         AND T1.N=T2.N-1;

Para contar cuantas "buenas" y "malas" tiene cada consultor:
Código SQL:
Ver original
  1. WITH Ta AS
  2. (SELECT ROW_NUMBER() OVER(Partition BY Comprador ORDER BY Fecha) N,
  3.         *
  4. FROM    #T),
  5. Tb AS
  6. (SELECT T1.Consultor,
  7.         T1.Comprador,
  8.         T1.Fecha Fecha1,
  9.         T2.Fecha Fecha2,
  10.         CASE WHEN T2.Fecha IS NULL THEN 'Buena'
  11.             WHEN DateDiff(DAY,T1.Fecha,T2.Fecha)>=31 THEN 'Buena'
  12.             ELSE 'Mala'
  13.             END Calificacion
  14. FROM    Ta T1
  15. LEFT JOIN Ta T2
  16.         ON T1.Comprador=T2.Comprador
  17.         AND T1.N=T2.N-1)
  18. SELECT  Consultor,
  19.         SUM(CASE WHEN Calificacion='Buena' THEN 1 ELSE 0 END) Buenas,
  20.         SUM(CASE WHEN Calificacion='Mala' THEN 1 ELSE 0 END) Malas,
  21.         COUNT(*) Total
  22. FROM    Tb
  23. GROUP BY Consultor;
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog