es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo eliminar los subtotales de un cubo OLAP generado por la función GROUP BY.

select Field1,DatePart(Year,aDate) aDate,count(distinct Employee) EmployeeCount from  dbo.myTable with (nolock)   group by cube(Field1,DatePart(Year,aDate))  order by EmployeeCount desc
Salida
Campo aDate  CantidadEmpleados
 01-2012 27166
 NULL   2012 27166
 NULL   NULL 27166 
El filtro muestra que el campo no es nulo. ¿Por qué obtengo un campo NULL como parte de la salida CantidadEmpleados cuando uso CUBE?
Lo descubrí. CUBE incluye subtotales y totales donde la columna es nula.
¿Hay alguna forma sencilla de eliminar los valores de resumen en los resultados del CUBE?
Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, puedes usar el operador GROUPING SETS en lugar del operador CUBE. GROUPING SETS te permite especificar exactamente qué combinaciones de agrupamiento quieres en tu conjunto de resultados, para que puedas excluir los valores de resumen. Aquí tienes un ejemplo:

    SELECT Field1, DatePart(Year, aDate) AS aDate, COUNT(DISTINCT Empleado) AS CantidadEmpleados
    FROM dbo.myTable WITH (NOLOCK)
    GROUP BY GROUPING SETS ((Field1, DatePart(Year, aDate)), (Field1), (DatePart(Year, aDate)), ())
    ORDER BY CantidadEmpleados DESC

    En esta consulta, estamos utilizando GROUPING SETS para especificar tres opciones de agrupamiento diferentes: una con Field1 y aDate, una solo con Field1, una solo con aDate y una sin ninguno. Los paréntesis vacíos al final significan que también estamos incluyendo la fila total. Al excluir el operador CUBE y usar GROUPING SETS, podemos tener un mayor control sobre nuestro conjunto de resultados y excluir los valores de resumen si no los deseamos.

Comments are closed.