SELECT productid, GROUPING (productid)      ,orderid, GROUPING (orderid)      ,SUM(quantity) AS total_quantity FROM [order details] GROUP BY productid, orderid WITH CUBE  ORDER BY productid, orderid 在这个语句中红字标注的分组有什么作用,与后边的group by 是否重复?with cube与with rollup的作用是否相同都是对分组数据进行小计?

解决方案 »

  1.   

    上面的分组是求  列里面的自定义null 和由于分组产生的 null 分别用0和1表示 并不重复
    culb 是分组数据进行小计然后总计  rollup是分组总计
      

  2.   

    GROUPING
    是一个聚合函数,它产生一个附加的列,当用 CUBE 或 ROLLUP 运算符添加行时,附加的列输出值为1,当所添加的行不是由 CUBE 或 ROLLUP 产生时,附加列值为0。仅在与包含 CUBE 或 ROLLUP 运算符的 GROUP BY 子句相联系的选择列表中才允许分组。语法
    GROUPING ( column_name )参数
    column_name是 GROUP BY 子句中用于检查 CUBE 或 ROLLUP 空值的列。返回类型
    int注释
    分组用于区分由 CUBE 和 ROLLUP 返回的空值和标准的空值。作为CUBE 或 ROLLUP 操作结果返回的 NULL 是 NULL 的特殊应用。它在结果集内作为列的占位符,意思是"全体"。
      

  3.   

    ls说的对。--联机帮助:GROUPING
    是一个聚合函数,它产生一个附加的列,当用 CUBE 或 ROLLUP 运算符添加行时,附加的列输出值为1,当所添加的行不是由 CUBE 或 ROLLUP 产生时,附加列值为0。仅在与包含 CUBE 或 ROLLUP 运算符的 GROUP BY 子句相联系的选择列表中才允许分组。
    结果集在 royalty 下显示两个空值。第一个 NULL 代表从表中这一列得到的空值组。第二个 NULL 在 ROLLUP 操作所添加的汇总行中。汇总行显示的是所有 royalty 组的 advance 合计数值,并且在 grp 列中用 1 标识。下面是结果集:royalty        total advance              grp 
    ---------      ---------------------    ---
    NULL           NULL                     0  
    10             57000.0000               0  
    12             2275.0000                0  
    14             4000.0000                0  
    16             7000.0000                0  
    24             25125.0000               0  
    NULL           95400.0000               1  
      

  4.   

    <关于CUBE>CUBE 运算符在 SELECT 语句的 GROUP BY 子句中指定。该语句的选择列表应包含维度列和聚合函数表达式。GROUP BY 应指定维度列和关键字 WITH CUBE。结果集将包含维度列中各值的所有可能组合,以及与这些维度值组合相匹配的基础行中的聚合值。例如,一个简单的表 Inventory 中包含:Item                 Color                Quantity                   
    -------------------- -------------------- -------------------------- 
    Table                Blue                 124                        
    Table                Red                  223                        
    Chair                Blue                 101                        
    Chair                Red                  210                        下列查询返回的结果集中,将包含 Item 和 Color 的所有可能组合的 Quantity 小计:SELECT Item, Color, SUM(Quantity) AS QtySum
    FROM Inventory
    GROUP BY Item, Color WITH CUBE下面是结果集:Item                 Color                QtySum                     
    -------------------- -------------------- -------------------------- 
    Chair                Blue                 101.00                     
    Chair                Red                  210.00                     
    Chair                (null)               311.00                     
    Table                Blue                 124.00                     
    Table                Red                  223.00                     
    Table                (null)               347.00                     
    (null)               (null)               658.00                     
    (null)               Blue                 225.00                     
    (null)               Red                  433.00                     
      

  5.   

    <ROLLUP>
    功能与CUBE运算符类似,区别在于: CUBE 生成的结果集显示了所选列中值的所有组合的聚合。
    ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。 -----
    lz到联机帮助看一下就好了~