【问题标题】:SQL Server query GROUPING with ROLLUPSQL Server 查询 GROUPING 与 ROLLUP
【发布时间】:2013-12-12 07:42:44
【问题描述】:

我正在尝试使用 ROLLUP 函数运行查询。

假设我的查询是:

SELECT  GEN.orgId,GEN.locId,GEN.rvcId
GEN.rvcName,GEN.menuItemID,GEN.menuItemName , SUM(salesTotal) as
salesTotal FROM GEN  GROUP BY  GEN.orgId,GEN.locId,
GEN.rvcName,GEN.menuItemID,GEN.menuItemName  ORDER BY GEN.menuItemName

这个查询输出的是:

orgId  locId  rvcName          menuItemID    menuItemName        salesTotal
10200  10002  Sydney Retail    10870         Cho Milk Shake        7.500000
10200  10002  Sydney Wholesale 10870         Cho Milk Shake        7.500000
10200  10002  Sydney Retail    10850         Berry Milk Shake     10.920000
10200  10002  Sydney Wholesale 10850         Berry Milk Shake     10.920000
10200  10002  Sydney Retail    10898         Apple Custard         5.460000
10200  10002  Sydney Wholesale 10898         Apple Custard         5.460000

当我将 GROUPING 和 ROLLUP 应用于我的查询时:

SELECT GEN.orgId,GEN.locId,  GEN.menuItemID, GEN.menuItemName,
CASE WHEN GROUPING( GEN.rvcName) = 1
    THEN 'Grand Total'
    ELSE GEN.rvcName END as rvcName
,SUM(salesTotal) as salesTotal
GROUP BY GEN.orgId,GEN.locId, GEN.rvcId, GEN.rvcName, GEN.menuItemID, GEN.menuItemName WITH ROLLUP  
ORDER BY   GEN.menuItemID asc   

此查询输出(仅适用于 Berry Milk Shake):

orgId   locId   menuItemID  menuItemName    rvcName           salesTotal
10200   10002   NULL            NULL             Sydney Retail     10.920000
10200   10002   NULL            NULL             Grand Total       10.920000
10200   10002   NULL            NULL             Sydney Wholesale  10.920000
10200   10002   NULL            NULL             Grand Total       10.920000
10200   10002   NULL            NULL             Grand Total       21.840000
10200   NULL    NULL            NULL             Grand Total       21.840000
NULL    NULL    NULL            NULL             Grand Total       21.840000
10200   10002   10850           Berry Milk Shake Sydney Wholesale  10.920000
10200   10002   10850           NULL             Sydney Wholesale  10.920000
10200   10002   10850           Berry Milk Shake Sydney Retail     10.920000
10200   10002   10850           NULL             Sydney Retail     10.920000

我的问题是:我用这个查询创建了很多不必要的数据。如何优化查询并生成如下所示的内容。提前致谢。

我想要实现的是:

orgId  locId  rvcName           menuItemID    menuItemName          salesTotal
10200  10002  Sydney Retail     10870         Cho Milk Shake        7.500000
10200  10002  Sydney Wholesale  10870         Cho Milk Shake        7.500000
10200  10002  ALL               10870         Cho Milk Shake       15.000000
10200  10002  Sydney Retail     10850         Berry Milk Shake     10.920000
10200  10002  Sydney Wholesale  10850         Berry Milk Shake     10.920000
10200  10002  ALL               10850         Berry Milk Shake     21.840000
10200  10002  Sydney Retail     10898         Apple Custard         5.460000
10200  10002  Sydney Wholesale  10898         Apple Custard         5.460000
10200  10002  ALL               10898         Apple Custard        10.920000

【问题讨论】:

    标签: sql-server grouping rollup


    【解决方案1】:

    再次感谢这个问题.. 我想在这里补充的一件事是,我们无法得到与您在这里所期望的相同的结果。 其背后的原因是, rvcName 列数据不会以您想要的方式出现。 当我们使用 group by 函数时,我们查询中包含的所有列数据都被分组在一起。

    因此,所有 Sydney Retail、Sydney Wholesale 将归为一组。这肯定会得到你想要的结果。 如果您在预期的答案中看到,您已经对除 rvcName 之外的所有列的数据进行了分组。

    所以,这是您的查询,我希望这可以指导您...

    选择 orgid,locid,rvcname, menuitemname,menuitemid, sum(salesTotal) 作为“总销售额” 从 gen 按 orgid、locid、rvcName、menuItemName、menuitemid 和汇总分组

    这会给你这样的结果

    orgid locid rvcname menuitemname menuitemid 总销售额
    1 2 悉尼零售苹果奶油冻 30 5.46
    1 2 悉尼零售苹果奶油冻 NULL 5.46
    1 2 悉尼零售浆果奶昔 20 10.92
    1 2 悉尼零售浆果奶昔 NULL 10.92
    1 2 悉尼零售奶昔 10 7.5
    1 2 悉尼零售奶昔 NULL 7.5
    1 2 悉尼零售 NULL NULL 23.88
    1 2 syndney 批发苹果奶油冻 30 5.46
    1 2 syndney 批发苹果奶油冻 NULL 5.46
    1 2 syndney 批发浆果奶昔 20 10.92
    1 2 syndney 批发浆果奶昔 NULL 10.92
    1 2 syndney 批发奶昔 10 7.5
    1 2 syndney 批发奶昔 NULL 7.5
    1 2 syndney 批发 NULL NULL 23.88
    1 2 NULL NULL NULL 47.76
    1 NULL NULL NULL NULL 47.76
    NULL NULL NULL NULL NULL 47.76

    希望您能找到问题所在...唯一的问题是,当我们使用任何组函数/聚合函数时,所有相似的数据都会被组合在一起。

    如果结果文本看起来很乱,请尝试粘贴到 excel 中。我不知道为什么虽然我将结果从 sql server 复制到 excel,但它看起来很乱。如果不便,请道歉。

    如果您仍有疑问,请随时告诉我。

    亲切的问候, Ashay(孟买/印度)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-10
      • 2014-10-06
      • 2018-12-14
      • 1970-01-01
      • 2021-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多