Machetes Varios

apuntes varios erp cwa logic ( ahora SoftLand Logic ) – sql y veremos que otra cosa

Funciones Analíticas en T-SQL


Fuente: searchsqlserver

Las primeras funciones analíticas llegan con SQL 2005:

ROW_NUMBER, RANK, DENSE_RANK y  NTIL

SQL 2012 incorpora: PERCENT_RANK, CUME_DIST, PERCENTILE_CONT, PERCENTILE_DISC, LEAD, LAG, FIRST_VALUE and LAST_VALUE

Funciones de Ranking

  • Row Number, asigna un numero distinto por cada registro
  • Rank, retorna el ranking, pero con huecos
  • Dense Rank, idem anterior, pero sin huecos
  • NTILE, particiona los rankings de acuerdo a la cantidad de grupos especificados

Ejemplo:

SELECT NROCTA,NOMBRE, VENTAS,
ROW_NUMBER() OVER ( ORDER BY VENTAS ) AS [Row_Number()],
RANK() OVER ( ORDER BY VENTAS ) AS [Rank()],
DENSE_RANK() OVER ( ORDER BY VENTAS ) AS [Dense_Rank()],
NTILE(10) OVER ( ORDER BY VENTAS ) AS [Ntile()]
FROM
(SELECT VTRMVC_NROCTA NROCTA,VTMCLH_NOMBRE NOMBRE,SUM(VTRMVC_IMPNAC) VENTAS
FROM VTRMVC JOIN VTRMVH ON
VTRMVC_MODFOR = VTRMVH_MODFOR AND
VTRMVC_CODFOR = VTRMVH_CODFOR AND
VTRMVC_NROFOR = VTRMVH_NROFOR
JOIN GRCCBH ON
VTRMVH_MODCOM = GRCCBH_MODCOM AND
VTRMVH_CODCOM = GRCCBH_CODCOM
JOIN VTMCLH ON
VTRMVC_NROCTA = VTMCLH_NROCTA
WHERE GRCCBH_VTSUBDIA = ‘V’
AND VTRMVC_FCHMOV > ‘20120101’
GROUP BY VTRMVC_NROCTA,VTMCLH_NOMBRE
HAVING SUM(VTRMVC_IMPNAC) > 0) VENTAS

Si se quiere hacer un corte por vendedor, se hace mediante la cláusula PARTITION BY

SELECT NROCTA,NOMBRE, VENTAS,VENDEDOR,
ROW_NUMBER() OVER ( PARTITION BY VENDEDOR ORDER BY VENTAS ) AS [Row_Number()],
RANK() OVER (PARTITION BY VENDEDOR ORDER BY VENTAS ) AS [Rank()],
DENSE_RANK() OVER (PARTITION BY VENDEDOR ORDER BY VENTAS ) AS [Dense_Rank()],
NTILE(10) OVER (PARTITION BY VENDEDOR ORDER BY VENTAS ) AS [Ntile()]
FROM
(SELECT VTRMVC_NROCTA NROCTA,VTMCLH_NOMBRE NOMBRE,SUM(VTRMVC_IMPNAC) VENTAS,
VTMCLH_VNDDOR VENDEDOR
FROM VTRMVC JOIN VTRMVH ON
VTRMVC_MODFOR = VTRMVH_MODFOR AND
VTRMVC_CODFOR = VTRMVH_CODFOR AND
VTRMVC_NROFOR = VTRMVH_NROFOR
JOIN GRCCBH ON
VTRMVH_MODCOM = GRCCBH_MODCOM AND
VTRMVH_CODCOM = GRCCBH_CODCOM
JOIN VTMCLH ON
VTRMVC_NROCTA = VTMCLH_NROCTA
WHERE GRCCBH_VTSUBDIA = ‘V’
AND VTRMVC_FCHMOV > ‘20120101’
GROUP BY VTRMVC_NROCTA,VTMCLH_NOMBRE,VTMCLH_VNDDOR
HAVING SUM(VTRMVC_IMPNAC) > 0) VENTAS

septiembre 26, 2012 - Posted by | SQL Server, Transact SQL

Aún no hay comentarios.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: