如何在 SQL DW 中使用 Rollup Grouping Function 错误?

How to use Rollup Grouping Function error in SQL DW?

我收到错误消息说 ROLLUP 不是函数名,但文档说它应该可以工作 消息 104162,级别 16,状态 1,第 2 行 'ROLLUP' 不是可识别的内置函数名称。

我试过按分组集分组,但它告诉我语法错误,那时我看到分组集不适用于 DW

SELECT S.[ProjectID]
      ,P.ProjectId
      ,P.Level2
      ,S.[PTDIncurredAmount]
      ,S.[PriorYearIncurredAmount]
      ,S.[YTDIncurredAmount], sum([YTDIncurredAmount]) as CTDActuals
  FROM [Fact].[vProjectSummary] as S
  JOIN dim.vProject as P on S.ProjectID=P.ProjectId
  Group by ROLLUP (P.Level2, S.ProjectID )

如果有人能更具体地指出此 Azure SQL DW 代码的问题,我将不胜感激!

根据 this github 文档 不支持 ROLLUP

The GROUP BY T-SQL clause aggregates data to a summary set of rows. GROUP BY has some options that SQL Data Warehouse does not support. These options have workarounds.

These options are

GROUP BY with ROLLUP

GROUPING SETS

GROUP BY with CUBE

建议的解决方法是使用 UNION ALL 来模拟 ROLLUP。如果我采用您的查询的简化版本

SELECT S.projectID, p.Level2, SUM( [YTDIncurredAmount] )
FROM [Fact].[vProjectSummary] AS S
    INNER JOIN dim.vProject AS P ON S.ProjectID = P.ProjectId
GROUP BY ROLLUP ( P.Level2, S.ProjectID )
ORDER BY 1, 2, 3

通过使用 ROLLUP 此查询请求以下聚合:

  • Level2 和 ProjectId
  • 2级
  • 总计

你可以用UNION ALL模拟这个:

-- Level 2 and ProjectID
SELECT S.ProjectID, p.Level2, SUM( [YTDIncurredAmount] )
FROM [Fact].[vProjectSummary] AS S
    INNER JOIN dim.vProject AS P ON S.ProjectID = P.ProjectID
GROUP BY S.ProjectID, p.Level2

UNION ALL

-- Level 2 
SELECT NULL, p.Level2, SUM( [YTDIncurredAmount] )
FROM [Fact].[vProjectSummary] AS S
    INNER JOIN dim.vProject AS P ON S.ProjectID = P.ProjectID
GROUP BY p.Level2

UNION ALL

-- Grand total
SELECT NULL, NULL, SUM( [YTDIncurredAmount] )
FROM [Fact].[vProjectSummary] AS S
    INNER JOIN dim.vProject AS P ON S.ProjectID = P.ProjectID

我无法使用 ROLLUP 进行任何查询,尽管这个 link 似乎表明这是可能的:

https://docs.microsoft.com/en-us/sql/t-sql/queries/select-group-by-transact-sql?view=sql-server-2017

还有一个反馈项可以在这里投票:

https://feedback.azure.com/forums/307516-sql-data-warehouse/suggestions/35836048-grouping-and-group-by-rollup-functions-needs-to-be

我正在使用 Azure Synapse Analytics(是 SQL 数据仓库)并且 ROLLUP 选项有效。下一页显示了 Azure Synapse Analytics 中 'GROUP BY' 子句的单独定义,其中支持 ROLLUP 但不支持 CUBE 和 GROUPING SETS

https://docs.microsoft.com/en-us/sql/t-sql/queries/select-group-by-transact-sql?view=sql-server-ver15

我认为这会随着产品的成熟而改变。