当 group by 后面只有一个列的时候,自然好判断,但是有多个列的时候,是怎么算的呢?
SELECT     
   Category,Year(SalesDate) as [year],Count(*) as Count FROM RawData
   GROUP BY Category, Year(SalesDate)
   WITH ROLLUP
Category year Count
X 2006 5
X NULL 5
Y 2005 4
Y 2006 11
Y NULL 15
Z 2006 4
Z NULL 4
NULL NULL 24

解决方案 »

  1.   

    货品按Category分组+ Year(SalesDate)汇总,每当Category变化或Year(SalesDate)变化时,
    先显示一个汇总,再显示下一个Category变化或Year(SalesDate)变化的记录
      

  2.   


     select   Category,Year(SalesDate) as [year],Region,SUM(Amount) as [sum] FROM RawData
       GROUP BY Category, Year(SalesDate),Region
        WITH ROLLUPCategory year Region sum
    X 2006 MidWest 24
    X 2006 South 165
    X 2006 West 36
    X 2006 NULL 225
    X NULL NULL 225
    Y 2005 NorthEast 28
    Y 2005 South 51
    Y 2005 NULL 79
    Y 2006 MidWest 38
    Y 2006 NorthEast 153
    Y 2006 South 236
    Y 2006 NULL 427
    Y NULL NULL 506
    Z 2006 MidWest 83
    Z 2006 NorthEast 55
    Z 2006 South 33
    Z 2006 West 44
    Z 2006 NULL 215
    Z NULL NULL 215
    NULL NULL NULL 946有3个列分组就更加看不懂了。
      

  3.   

    Category    year    Count
    X    2006    5
    X    NULL    5
    Y    2005    4
    Y    2006    11
    Y    NULL    15
    Z    2006    4
    Z    NULL    4
    NULL    NULL    24
    一楼的,第三到第四之间为什么没有汇总呢,年份变了啊。
      

  4.   

    你是按Category, Year(SalesDate),Region这三个分组,
    所以这三列任意一个列的发生变化时,都会插入一行汇总,
    同时两个列同时变化时,会插入两行汇总
    三个列同时变化,会插入三行汇总
    最后是一个所有的汇总数
      

  5.   

    终于看出了一个规律,大家看看是否正确group by 第一列,第二列,第三列 
    with rollup运算结果受 group by 后列的影响, 第一列 肯定是最后一个是NULL(聚合),当第一列值有变化时做聚合,当第二列值有变化时做聚合当第N列值有变化时,第N+1列做聚合。