Ver Mensaje Individual
  #2 (permalink)  
Antiguo 09/09/2014, 03:28
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

Suponemos que estos son los datos:
Código SQL:
Ver original
  1. CREATE TABLE #T(Consultor CHAR(1),
  2.                 Comprador CHAR(3),
  3.                 Fecha DateTime);
  4. CREATE Clustered INDEX Idx_#T ON #T(Consultor,Comprador,Fecha);
  5. GO
  6.  
  7. INSERT
  8. INTO    #T
  9. VALUES  ('A','A1','20140101'), --buena
  10.         ('A','A1','20140215'),
  11.         ('A','A2','20140101'), --mala
  12.         ('A','A2','20140115'),
  13.         ('A','A3','20140101'), --buena
  14.         ('B','B1','20140101'), --mala
  15.         ('B','B1','20140110'),
  16.         ('B','B2','20140101'), --mala
  17.         ('B','B2','20140101'),
  18.         ('C','C1','20140101'), --buena
  19.         ('C','C1','20140215'),
  20.         ('C','C1','20140401');

El resumen e este caso:
Código SQL:
Ver original
  1. WITH T1 AS
  2. (SELECT ROW_NUMBER() OVER (Partition BY Consultor,Comprador ORDER BY Fecha) N,
  3.         *
  4. FROM    #T),
  5. T2 AS
  6. (SELECT Consultor,
  7.         Comprador,
  8.         CASE WHEN COUNT(*)= 2 THEN DateDiff(DAY,MIN(Fecha),MAX(Fecha)) ELSE NULL END Plazo
  9. FROM    T1
  10. WHERE   N IN (1,2)
  11. GROUP BY Consultor,
  12.         Comprador)
  13. SELECT  Consultor,
  14.         COUNT(*) Total,
  15.         SUM(CASE WHEN Plazo<31 THEN 0 ELSE 1 END) Buenas,
  16.         SUM(CASE WHEN Plazo<31 THEN 1 ELSE 0 END) Malas
  17. FROM    T2
  18. GROUP BY Consultor;
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog