pct
La función pct es una función de ventana que devuelve el porcentaje de cada valor respecto la suma de todos los registros del rango.
Es una función con OVER implícito, es decir, si no se especifica la partición se asume OVER ()
Se puede usar tanto la sintaxis OVER del SQL estándar como la sintaxis compacta propia de Crono.
Ejemplo
Sección titulada «Ejemplo»La siguiente consulta devuelve las ventas de cada mes y el porcentaje de cada mes respecto el total del año.
select year(fecha) anyo, month(fecha) mes, sum(unidades) ventas, pct(ventas) pctfrom dbo.lb_ventaswhere anyo=2012group by allLa consulta SQL generada es:
SELECT year(fecha) AS anyo, month(fecha) AS mes, sum(unidades) AS ventas, CASE WHEN sum(sum(unidades)) OVER ()<>0 THEN 1.0*sum(unidades)/sum(sum(unidades)) OVER () END AS [pct]FROM dbo.lb_ventasWHERE year(fecha)=2012GROUP BY year(fecha), month(fecha)También se puede incluir la cláusula PARTITION BY. La siguiente consulta muestra las ventas de todos los meses de todos los años, incluyendo el porcentaje de cada mes respecto al total anual.
select year(fecha) anyo, month(fecha) mes, sum(unidades) ventas, pct(ventas partition by anyo) pctfrom dbo.lb_ventasgroup by allEl SQL generado es:
SELECT year(fecha) AS anyo, month(fecha) AS mes, sum(unidades) AS ventas, CASE WHEN sum(sum(unidades)) OVER (PARTITION BY year(fecha))<>0 THEN 1.0*sum(unidades)/sum(sum(unidades)) OVER (PARTITION BY year(fecha)) END AS [pct]FROM dbo.lb_ventasGROUP BY year(fecha), month(fecha)