GROUPING_ID (Transact-SQL)GROUPING_ID (Transact-SQL)

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure nãoSQL Data Warehouse do Azure nãoParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

É uma função que calcula o nível de agrupamento.Is a function that computes the level of grouping. GROUPING_ID pode ser usado apenas na lista SELECT <select> e nas cláusulas HAVING ou ORDER BY quando GROUP BY é especificado.GROUPING_ID can be used only in the SELECT <select> list, HAVING, or ORDER BY clauses when GROUP BY is specified.

Ícone de link do tópico Convenções de sintaxe de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax

  
GROUPING_ID ( <column_expression>[ ,...n ] )  

ArgumentosArguments

<column_expression><column_expression>
É uma column_expression em uma cláusula GROUP BY.Is a column_expression in a GROUP BY clause.

Tipo de retornoReturn Type

intint

RemarksRemarks

A GROUPING_ID <column_expression> deve corresponder exatamente à expressão na lista GROUP BY.The GROUPING_ID <column_expression> must exactly match the expression in the GROUP BY list. Por exemplo, se você estiver agrupando por DATEPART (yyyy, <column name>), use GROUPING_ID (DATEPART (yyyy, (yyyy, <column name>)); ou se estiver agrupando por <column name>, use GROUPING_ID (<column name>).For example, if you are grouping by DATEPART (yyyy, <column name>), use GROUPING_ID (DATEPART (yyyy, <column name>)); or if you are grouping by <column name>, use GROUPING_ID (<column name>).

Comparando GROUPING_ID () com GROUPING ()Comparing GROUPING_ID () to GROUPING ()

GROUPING_ID (<column_expression> [ , ...n ]) insere o equivalente ao retorno de GROUPING (<column_expression>) para cada coluna em sua lista de colunas em cada linha de saída como uma cadeia de caracteres com números um e zero.GROUPING_ID (<column_expression> [ ,...n ]) inputs the equivalent of the GROUPING (<column_expression>) return for each column in its column list in each output row as a string of ones and zeros. GROUPING_ID interpreta a cadeia de caracteres como um número base 2 e retorna o inteiro equivalente.GROUPING_ID interprets that string as a base-2 number and returns the equivalent integer. Por exemplo, considere a seguinte instrução: SELECT a, b, c, SUM(d),``GROUPING_ID(a,b,c)``FROM T GROUP BY <group by list>.For example consider the following statement: SELECT a, b, c, SUM(d),``GROUPING_ID(a,b,c)``FROM T GROUP BY <group by list>. A tabela a seguir mostra os valores de entrada e saída de GROUPING_ID ().The following table shows the GROUPING_ID () input and output values.

Colunas agregadasColumns aggregated Entrada de GROUPING_ID (a, b, c) = GROUPING(a) + GROUPING(b) + GROUPING(c)GROUPING_ID (a, b, c) input = GROUPING(a) + GROUPING(b) + GROUPING(c) Saída de GROUPING_ID ()GROUPING_ID () output
a 100 4
b 010 2
c 001 1
ab 110 6
ac 101 5
bc 011 3
abc 111 7

Definição técnica de GROUPING_ID ()Technical Definition of GROUPING_ID ()

Cada argumento GROUPING_ID deve ser um elemento da lista GROUP BY.Each GROUPING_ID argument must be an element of the GROUP BY list. GROUPING_ID () retorna um bitmap integer cujos N bits inferiores podem ser literais.GROUPING_ID () returns an integer bitmap whose lowest N bits may be lit. Um bit literal indica que o argumento correspondente não é uma coluna de agrupamento para a linha de saída especificada.A lit bit indicates the corresponding argument is not a grouping column for the given output row. O bit da ordem mais baixa corresponde ao argumento N e o N-1º bit de ordem mais baixa corresponde ao argumento 1.The lowest-order bit corresponds to argument N, and the N-1th lowest-order bit corresponds to argument 1.

Equivalentes de GROUPING_ID ()GROUPING_ID () Equivalents

Para uma única consulta de agrupamento, GROUPING (<column_expression>) é equivalente a GROUPING_ID (<column_expression>) e ambos retornam 0.For a single grouping query, GROUPING (<column_expression>) is equivalent to GROUPING_ID (<column_expression>), and both return 0.

Por exemplo, as instruções seguintes são equivalentes:For example, the following statements are equivalent:

Instrução A:Statement A:

SELECT GROUPING_ID(A,B)  
FROM T   
GROUP BY CUBE(A,B)   

Instrução B:Statement B:

SELECT 3 FROM T GROUP BY ()  
UNION ALL  
SELECT 1 FROM T GROUP BY A  
UNION ALL  
SELECT 2 FROM T GROUP BY B  
UNION ALL  
SELECT 0 FROM T GROUP BY A,B  

ExemplosExamples

A.A. Usando GROUPING_ID para identificar níveis de agrupamentoUsing GROUPING_ID to identify grouping levels

O exemplo a seguir retorna a contagem de funcionários por Name e Title, Name, e o total da empresa no banco de dados AdventureWorks2012AdventureWorks2012.The following example returns the count of employees by Name and Title, Name, and company total in the AdventureWorks2012AdventureWorks2012 database. GROUPING_ID() é usado para criar um valor para cada linha na coluna Title que identifica o nível de agregação.GROUPING_ID() is used to create a value for each row in the Title column that identifies its level of aggregation.

SELECT D.Name  
    ,CASE   
    WHEN GROUPING_ID(D.Name, E.JobTitle) = 0 THEN E.JobTitle  
    WHEN GROUPING_ID(D.Name, E.JobTitle) = 1 THEN N'Total: ' + D.Name   
    WHEN GROUPING_ID(D.Name, E.JobTitle) = 3 THEN N'Company Total:'  
        ELSE N'Unknown'  
    END AS N'Job Title'  
    ,COUNT(E.BusinessEntityID) AS N'Employee Count'  
FROM HumanResources.Employee E  
    INNER JOIN HumanResources.EmployeeDepartmentHistory DH  
        ON E.BusinessEntityID = DH.BusinessEntityID  
    INNER JOIN HumanResources.Department D  
        ON D.DepartmentID = DH.DepartmentID       
WHERE DH.EndDate IS NULL  
    AND D.DepartmentID IN (12,14)  
GROUP BY ROLLUP(D.Name, E.JobTitle);  

B.B. Usando GROUPING_ID para filtrar um conjunto de resultadosUsing GROUPING_ID to filter a result set

Exemplo simplesSimple Example

No código a seguir, para retornar somente as linhas com uma contagem de funcionários por título, remova os caracteres de comentário de HAVING GROUPING_ID(D.Name, E.JobTitle); = 0 no banco de dados AdventureWorks2012AdventureWorks2012.In the following code, to return only the rows that have a count of employees by title, remove the comment characters from HAVING GROUPING_ID(D.Name, E.JobTitle); = 0 in the AdventureWorks2012AdventureWorks2012 database. Para retornar somente as linhas com uma contagem de funcionários por departamento, remova os caracteres de comentário de HAVING GROUPING_ID(D.Name, E.JobTitle) = 1;.To return only rows with a count of employees by department, remove the comment characters from HAVING GROUPING_ID(D.Name, E.JobTitle) = 1;.

SELECT D.Name  
    ,E.JobTitle  
    ,GROUPING_ID(D.Name, E.JobTitle) AS 'Grouping Level'  
    ,COUNT(E.BusinessEntityID) AS N'Employee Count'  
FROM HumanResources.Employee AS E  
    INNER JOIN HumanResources.EmployeeDepartmentHistory AS DH  
        ON E.BusinessEntityID = DH.BusinessEntityID  
    INNER JOIN HumanResources.Department AS D  
        ON D.DepartmentID = DH.DepartmentID       
WHERE DH.EndDate IS NULL  
    AND D.DepartmentID IN (12,14)  
GROUP BY ROLLUP(D.Name, E.JobTitle)  
--HAVING GROUPING_ID(D.Name, E.JobTitle) = 0; --All titles  
--HAVING GROUPING_ID(D.Name, E.JobTitle) = 1; --Group by Name;  

Veja o conjunto dos resultados não filtrados:Here is the unfiltered result set.

NomeName TitleTitle Nível de agrupamentoGrouping Level Contagem de funcionáriosEmployee Count NomeName
Controle de documentosDocument Control Especialista de controleControl Specialist 00 22 Controle de documentosDocument Control
Controle de documentosDocument Control Assistente de controle de documentosDocument Control Assistant 00 22 Controle de documentosDocument Control
Controle de documentosDocument Control Gerente de controle de documentosDocument Control Manager 00 11 Controle de documentosDocument Control
Controle de documentosDocument Control NULLNULL 11 55 Controle de documentosDocument Control
Instalações e manutençãoFacilities and Maintenance Assistente administrativo de instalaçõesFacilities Administrative Assistant 00 11 Instalações e manutençãoFacilities and Maintenance
Instalações e manutençãoFacilities and Maintenance Gerente de instalaçõesFacilities Manager 00 11 Instalações e manutençãoFacilities and Maintenance
Instalações e manutençãoFacilities and Maintenance ZeladorJanitor 00 44 Instalações e manutençãoFacilities and Maintenance
Instalações e manutençãoFacilities and Maintenance Supervisor de manutençãoMaintenance Supervisor 00 11 Instalações e manutençãoFacilities and Maintenance
Instalações e manutençãoFacilities and Maintenance NULLNULL 11 77 Instalações e manutençãoFacilities and Maintenance
NULLNULL NULLNULL 33 1212 NULLNULL

Exemplo complexoComplex Example

O exemplo a seguir usa GROUPING_ID() para filtrar um conjunto de resultados que contém vários níveis de agrupamento por nível de agrupamento.The following example uses GROUPING_ID() to filter a result set that contains multiple grouping levels by grouping level. Um código semelhante pode ser usado para criar uma exibição com vários níveis de agrupamento e um procedimento armazenado que chama a exibição passando um parâmetro para filtrá-la por nível de agrupamento.Similar code can be used to create a view that has several grouping levels and a stored procedure that calls the view by passing a parameter that filters the view by grouping level. O exemplo usa o banco de dados AdventureWorks2012AdventureWorks2012.The example uses the AdventureWorks2012AdventureWorks2012 database.

DECLARE @Grouping nvarchar(50);  
DECLARE @GroupingLevel smallint;  
SET @Grouping = N'CountryRegionCode Total';  
  
SELECT @GroupingLevel = (  
    CASE @Grouping  
        WHEN N'Grand Total'             THEN 15  
        WHEN N'SalesPerson Total'       THEN 14  
        WHEN N'Store Total'             THEN 13  
        WHEN N'Store SalesPerson Total' THEN 12  
        WHEN N'CountryRegionCode Total' THEN 11  
        WHEN N'Group Total'             THEN 7  
        ELSE N'Unknown'  
    END);  
  
SELECT   
    T.[Group]  
    ,T.CountryRegionCode  
    ,S.Name AS N'Store'  
    ,(SELECT P.FirstName + ' ' + P.LastName   
        FROM Person.Person AS P   
        WHERE P.BusinessEntityID = H.SalesPersonID)  
        AS N'Sales Person'  
    ,SUM(TotalDue)AS N'TotalSold'  
    ,CAST(GROUPING(T.[Group])AS char(1)) +   
        CAST(GROUPING(T.CountryRegionCode)AS char(1)) +   
        CAST(GROUPING(S.Name)AS char(1)) +   
        CAST(GROUPING(H.SalesPersonID)AS char(1))   
        AS N'GROUPING base-2'  
    ,GROUPING_ID((T.[Group])  
        ,(T.CountryRegionCode),(S.Name),(H.SalesPersonID)  
        ) AS N'GROUPING_ID'  
    ,CASE   
        WHEN GROUPING_ID(  
            (T.[Group]),(T.CountryRegionCode)  
            ,(S.Name),(H.SalesPersonID)  
            ) = 15 THEN N'Grand Total'  
        WHEN GROUPING_ID(  
            (T.[Group]),(T.CountryRegionCode)  
            ,(S.Name),(H.SalesPersonID)  
            ) = 14 THEN N'SalesPerson Total'  
        WHEN GROUPING_ID(  
            (T.[Group]),(T.CountryRegionCode)  
            ,(S.Name),(H.SalesPersonID)  
            ) = 13 THEN N'Store Total'  
        WHEN GROUPING_ID(  
            (T.[Group]),(T.CountryRegionCode)  
            ,(S.Name),(H.SalesPersonID)  
            ) = 12 THEN N'Store SalesPerson Total'  
        WHEN GROUPING_ID(  
            (T.[Group]),(T.CountryRegionCode)  
            ,(S.Name),(H.SalesPersonID)  
            ) = 11 THEN N'CountryRegionCode Total'  
        WHEN GROUPING_ID(  
            (T.[Group]),(T.CountryRegionCode)  
            ,(S.Name),(H.SalesPersonID)  
            ) =  7 THEN N'Group Total'  
        ELSE N'Error'  
        END AS N'Level'  
FROM Sales.Customer AS C  
    INNER JOIN Sales.Store AS S  
        ON C.StoreID  = S.BusinessEntityID   
    INNER JOIN Sales.SalesTerritory AS T  
        ON C.TerritoryID  = T.TerritoryID   
    INNER JOIN Sales.SalesOrderHeader AS H  
        ON C.CustomerID = H.CustomerID  
GROUP BY GROUPING SETS ((S.Name,H.SalesPersonID)  
    ,(H.SalesPersonID),(S.Name)  
    ,(T.[Group]),(T.CountryRegionCode),()  
    )  
HAVING GROUPING_ID(  
    (T.[Group]),(T.CountryRegionCode),(S.Name),(H.SalesPersonID)  
    ) = @GroupingLevel  
ORDER BY   
    GROUPING_ID(S.Name,H.SalesPersonID),GROUPING_ID((T.[Group])  
    ,(T.CountryRegionCode)  
    ,(S.Name)  
    ,(H.SalesPersonID))ASC;  

C.C. Usando GROUPING_ID () com ROLLUP e CUBE para identificar níveis de agrupamentoUsing GROUPING_ID () with ROLLUP and CUBE to identify grouping levels

O código nos exemplos a seguir mostram como usar GROUPING() para computar a coluna Bit Vector(base-2).The code in the following examples show using GROUPING() to compute the Bit Vector(base-2) column. GROUPING_ID() é usado para computar a coluna Integer Equivalent correspondente.GROUPING_ID() is used to compute the corresponding Integer Equivalent column. A ordem de colunas na função GROUPING_ID() é o oposto da ordem de coluna das colunas que estão concatenadas pela função GROUPING().The column order in the GROUPING_ID() function is the opposite of the column order of the columns that are concatenated by the GROUPING() function.

Nesses exemplos, GROUPING_ID() é usado para criar um valor para cada linha na coluna Grouping Level ao identificar o nível de agrupamento.In these examples, GROUPING_ID() is used to create a value for each row in the Grouping Level column to identify the level of grouping. Os níveis de agrupamento nem sempre são uma lista consecutiva de inteiros que começam com 1 (0, 1, 2, ...n).Grouping levels are not always a consecutive list of integers that start with 1 (0, 1, 2,...n).

Observação

GROUPING e GROUPING_ID podem ser usados em uma cláusula HAVING para filtrar um conjunto de resultados.GROUPING and GROUPING_ID can be used n a HAVING clause to filter a result set.

Exemplo de ROLLUPROLLUP Example

Neste exemplo, todos os níveis de agrupamento não aparecem como no exemplo de CUBE a seguir.In this example, all grouping levels do not appear as they do in the following CUBE example. Se a ordem das colunas na lista ROLLUP for alterada, os valores de nível na coluna Grouping Level também terão de ser alterados.If the order of the columns in the ROLLUP list is changed, the level values in the Grouping Level column will also have to be changed. O exemplo usa o banco de dados AdventureWorks2012AdventureWorks2012.The example uses the AdventureWorks2012AdventureWorks2012 database.

SELECT DATEPART(yyyy,OrderDate) AS N'Year'  
    ,DATEPART(mm,OrderDate) AS N'Month'  
    ,DATEPART(dd,OrderDate) AS N'Day'  
    ,SUM(TotalDue) AS N'Total Due'  
    ,CAST(GROUPING(DATEPART(dd,OrderDate))AS char(1)) +   
        CAST(GROUPING(DATEPART(mm,OrderDate))AS char(1)) +   
        CAST(GROUPING(DATEPART(yyyy,OrderDate))AS char(1))   
     AS N'Bit Vector(base-2)'  
    ,GROUPING_ID(DATEPART(yyyy,OrderDate)  
        ,DATEPART(mm,OrderDate)  
        ,DATEPART(dd,OrderDate))   
        AS N'Integer Equivalent'  
    ,CASE  
        WHEN GROUPING_ID(DATEPART(yyyy,OrderDate)  
            ,DATEPART(mm,OrderDate),DATEPART(dd,OrderDate)  
            ) = 0 THEN N'Year Month Day'  
        WHEN GROUPING_ID(DATEPART(yyyy,OrderDate)  
            ,DATEPART(mm,OrderDate),DATEPART(dd,OrderDate)  
            ) = 1 THEN N'Year Month'  
        WHEN GROUPING_ID(DATEPART(yyyy,OrderDate)  
            ,DATEPART(mm,OrderDate),DATEPART(dd,OrderDate)  
            ) = 2 THEN N'not used'  
        WHEN GROUPING_ID(DATEPART(yyyy,OrderDate)  
            ,DATEPART(mm,OrderDate),DATEPART(dd,OrderDate)  
            ) = 3 THEN N'Year'  
        WHEN GROUPING_ID(DATEPART(yyyy,OrderDate)  
            ,DATEPART(mm,OrderDate),DATEPART(dd,OrderDate)  
            ) = 4 THEN N'not used'  
        WHEN GROUPING_ID(DATEPART(yyyy,OrderDate)  
            ,DATEPART(mm,OrderDate),DATEPART(dd,OrderDate)  
            ) = 5 THEN N'not used'  
        WHEN GROUPING_ID(DATEPART(yyyy,OrderDate)  
            ,DATEPART(mm,OrderDate),DATEPART(dd,OrderDate)  
            ) = 6 THEN N'not used'  
        WHEN GROUPING_ID(DATEPART(yyyy,OrderDate)  
            ,DATEPART(mm,OrderDate),DATEPART(dd,OrderDate)  
            ) = 7 THEN N'Grand Total'  
    ELSE N'Error'  
    END AS N'Grouping Level'  
FROM Sales.SalesOrderHeader  
WHERE DATEPART(yyyy,OrderDate) IN(N'2007',N'2008')  
    AND DATEPART(mm,OrderDate) IN(1,2)  
    AND DATEPART(dd,OrderDate) IN(1,2)  
GROUP BY ROLLUP(DATEPART(yyyy,OrderDate)  
        ,DATEPART(mm,OrderDate)  
        ,DATEPART(dd,OrderDate))  
ORDER BY GROUPING_ID(DATEPART(mm,OrderDate)  
    ,DATEPART(yyyy,OrderDate)  
    ,DATEPART(dd,OrderDate)  
    )  
    ,DATEPART(yyyy,OrderDate)  
    ,DATEPART(mm,OrderDate)  
    ,DATEPART(dd,OrderDate);  

Este é um conjunto de resultados parcial.Here is a partial result set.

YearYear MonthMonth DayDay Total devidoTotal Due Vetor de bit (base 2)Bit Vector (base-2) Equivalente inteiroInteger Equivalent Nível de agrupamentoGrouping Level
20072007 11 11 1497452.60661497452.6066 000000 00 Ano Mês DiaYear Month Day
20072007 11 22 21772.349421772.3494 000000 00 Ano Mês DiaYear Month Day
20072007 22 11 2705653.59132705653.5913 000000 00 Ano Mês DiaYear Month Day
20072007 22 22 21684.406821684.4068 000000 00 Ano Mês DiaYear Month Day
20082008 11 11 1908122.09671908122.0967 000000 00 Ano Mês DiaYear Month Day
20082008 11 22 46458.069146458.0691 000000 00 Ano Mês DiaYear Month Day
20082008 22 11 3108771.97293108771.9729 000000 00 Ano Mês DiaYear Month Day
20082008 22 22 54598.548854598.5488 000000 00 Ano Mês DiaYear Month Day
20072007 11 NULLNULL 1519224.9561519224.956 100100 11 Ano MêsYear Month
20072007 22 NULLNULL 2727337.99812727337.9981 100100 11 Ano MêsYear Month
20082008 11 NULLNULL 1954580.16581954580.1658 100100 11 Ano MêsYear Month
20082008 22 NULLNULL 3163370.52173163370.5217 100100 11 Ano MêsYear Month
20072007 NULLNULL NULLNULL 4246562.95414246562.9541 110110 33 YearYear
20082008 NULLNULL NULLNULL 5117950.68755117950.6875 110110 33 YearYear
NULLNULL NULLNULL NULLNULL 9364513.64169364513.6416 111111 77 Grand TotalGrand Total

Exemplo de CUBECUBE Example

Neste exemplo, a função GROUPING_ID() é usada para criar um valor para cada linha na coluna Grouping Level ao identificar o nível de agrupamento.In this example, the GROUPING_ID() function is used to create a value for each row in the Grouping Level column to identify the level of grouping.

Diferentemente de ROLLUP no exemplo anterior, CUBE gera a saída de todos os níveis de agrupamento.Unlike ROLLUP in the previous example, CUBE outputs all grouping levels. Se a ordem das colunas na lista CUBE for alterada, os valores de nível na coluna Grouping Level também terão de ser alterados.If the order of the columns in the CUBE list is changed, the level values in the Grouping Level column will also have to be changed. O exemplo usa o banco de dados AdventureWorks2012AdventureWorks2012The example uses the AdventureWorks2012AdventureWorks2012 database

SELECT DATEPART(yyyy,OrderDate) AS N'Year'  
    ,DATEPART(mm,OrderDate) AS N'Month'  
    ,DATEPART(dd,OrderDate) AS N'Day'  
    ,SUM(TotalDue) AS N'Total Due'  
    ,CAST(GROUPING(DATEPART(dd,OrderDate))AS char(1)) +   
        CAST(GROUPING(DATEPART(mm,OrderDate))AS char(1)) +   
        CAST(GROUPING(DATEPART(yyyy,OrderDate))AS char(1))   
        AS N'Bit Vector(base-2)'  
    ,GROUPING_ID(DATEPART(yyyy,OrderDate)  
        ,DATEPART(mm,OrderDate)  
        ,DATEPART(dd,OrderDate))   
        AS N'Integer Equivalent'  
    ,CASE  
        WHEN GROUPING_ID(DATEPART(yyyy,OrderDate)  
            ,DATEPART(mm,OrderDate),DATEPART(dd,OrderDate)  
            ) = 0 THEN N'Year Month Day'  
        WHEN GROUPING_ID(DATEPART(yyyy,OrderDate)   
            ,DATEPART(mm,OrderDate),DATEPART(dd,OrderDate)  
            ) = 1 THEN N'Year Month'  
        WHEN GROUPING_ID(DATEPART(yyyy,OrderDate)   
            ,DATEPART(mm,OrderDate),DATEPART(dd,OrderDate)  
            ) = 2 THEN N'Year Day'  
        WHEN GROUPING_ID(DATEPART(yyyy,OrderDate)   
            ,DATEPART(mm,OrderDate),DATEPART(dd,OrderDate)  
            ) = 3 THEN N'Year'  
        WHEN GROUPING_ID(DATEPART(yyyy,OrderDate)   
            ,DATEPART(mm,OrderDate),DATEPART(dd,OrderDate)  
            ) = 4 THEN N'Month Day'  
        WHEN GROUPING_ID(DATEPART(yyyy,OrderDate)   
            ,DATEPART(mm,OrderDate),DATEPART(dd,OrderDate)  
            ) = 5 THEN N'Month'  
        WHEN GROUPING_ID(DATEPART(yyyy,OrderDate)   
            ,DATEPART(mm,OrderDate),DATEPART(dd,OrderDate)  
            ) = 6 THEN N'Day'  
        WHEN GROUPING_ID(DATEPART(yyyy,OrderDate)   
            ,DATEPART(mm,OrderDate),DATEPART(dd,OrderDate)  
            ) = 7 THEN N'Grand Total'  
    ELSE N'Error'  
    END AS N'Grouping Level'  
FROM Sales.SalesOrderHeader  
WHERE DATEPART(yyyy,OrderDate) IN(N'2007',N'2008')  
    AND DATEPART(mm,OrderDate) IN(1,2)  
    AND DATEPART(dd,OrderDate) IN(1,2)  
GROUP BY CUBE(DATEPART(yyyy,OrderDate)  
    ,DATEPART(mm,OrderDate)  
    ,DATEPART(dd,OrderDate))  
ORDER BY GROUPING_ID(DATEPART(yyyy,OrderDate)  
    ,DATEPART(mm,OrderDate)  
    ,DATEPART(dd,OrderDate)  
    )  
    ,DATEPART(yyyy,OrderDate)  
    ,DATEPART(mm,OrderDate)  
    ,DATEPART(dd,OrderDate);  

Este é um conjunto de resultados parcial.Here is a partial result set.

YearYear MonthMonth DayDay Total devidoTotal Due Vetor de bit (base 2)Bit Vector (base-2) Equivalente inteiroInteger Equivalent Nível de agrupamentoGrouping Level
20072007 11 11 1497452.60661497452.6066 000000 00 Ano Mês DiaYear Month Day
20072007 11 22 21772.349421772.3494 000000 00 Ano Mês DiaYear Month Day
20072007 22 11 2705653.59132705653.5913 000000 00 Ano Mês DiaYear Month Day
20072007 22 22 21684.406821684.4068 000000 00 Ano Mês DiaYear Month Day
20082008 11 11 1908122.09671908122.0967 000000 00 Ano Mês DiaYear Month Day
20082008 11 22 46458.069146458.0691 000000 00 Ano Mês DiaYear Month Day
20082008 22 11 3108771.97293108771.9729 000000 00 Ano Mês DiaYear Month Day
20082008 22 22 54598.548854598.5488 000000 00 Ano Mês DiaYear Month Day
20072007 11 NULLNULL 1519224.9561519224.956 100100 11 Ano MêsYear Month
20072007 22 NULLNULL 2727337.99812727337.9981 100100 11 Ano MêsYear Month
20082008 11 NULLNULL 1954580.16581954580.1658 100100 11 Ano MêsYear Month
20082008 22 NULLNULL 3163370.52173163370.5217 100100 11 Ano MêsYear Month
20072007 NULLNULL 11 4203106.19794203106.1979 010010 22 Ano DiaYear Day
20072007 NULLNULL 22 43456.756243456.7562 010010 22 Ano DiaYear Day
20082008 NULLNULL 11 5016894.06965016894.0696 010010 22 Ano DiaYear Day
20082008 NULLNULL 22 101056.6179101056.6179 010010 22 Ano DiaYear Day
20072007 NULLNULL NULLNULL 4246562.95414246562.9541 110110 33 YearYear
20082008 NULLNULL NULLNULL 5117950.68755117950.6875 110110 33 YearYear
NULLNULL 11 11 3405574.70333405574.7033 001001 44 Mês DiaMonth Day
NULLNULL 11 22 68230.418568230.4185 001001 44 Mês DiaMonth Day
NULLNULL 22 11 5814425.56425814425.5642 001001 44 Mês DiaMonth Day
NULLNULL 22 22 76282.955676282.9556 001001 44 Mês DiaMonth Day
NULLNULL 11 NULLNULL 3473805.12183473805.1218 101101 55 MonthMonth
NULLNULL 22 NULLNULL 5890708.51985890708.5198 101101 55 MonthMonth
NULLNULL NULLNULL 11 9220000.26759220000.2675 011011 66 DayDay
NULLNULL NULLNULL 22 144513.3741144513.3741 011011 66 DayDay
NULLNULL NULLNULL NULLNULL 9364513.64169364513.6416 111111 77 Grand TotalGrand Total

Consulte TambémSee Also

GROUPING (Transact-SQL) GROUPING (Transact-SQL)
GROUP BY (Transact-SQL)GROUP BY (Transact-SQL)