1

我收到错误消息,ROLLUP 不是函数名,但文档说它应该可以工作 Msg 104162, Level 16, State 1, Line 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 代码的问题,我将不胜感激!

4

2 回答 2

0

根据这个 github文档ROLLUP不受支持:

GROUP BY T-SQL 子句将数据聚合到一组汇总行中。GROUP BY 有一些 SQL 数据仓库不支持的选项。这些选项有解决方法。

这些选项是

使用 ROLLUP 进行分组

分组集

使用 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尽管此链接似乎确实表明这是可能的,但我无法获得任何查询来工作:

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

于 2019-03-23T12:27:47.843 回答
0

我正在使用 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

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

于 2020-07-02T15:54:55.260 回答