如何在 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
还有一个反馈项可以在这里投票:
我正在使用 Azure Synapse Analytics(是 SQL 数据仓库)并且 ROLLUP 选项有效。下一页显示了 Azure Synapse Analytics 中 'GROUP BY' 子句的单独定义,其中支持 ROLLUP 但不支持 CUBE 和 GROUPING SETS
我认为这会随着产品的成熟而改变。
我收到错误消息说 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
还有一个反馈项可以在这里投票:
我正在使用 Azure Synapse Analytics(是 SQL 数据仓库)并且 ROLLUP 选项有效。下一页显示了 Azure Synapse Analytics 中 'GROUP BY' 子句的单独定义,其中支持 ROLLUP 但不支持 CUBE 和 GROUPING SETS
我认为这会随着产品的成熟而改变。