我收到错误消息: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的这段代码有关的问题,我将不胜感激!
答案 0 :(得分:0)
根据this github文档,不支持 ROLLUP :
GROUP BY T-SQL子句将数据聚合到一组摘要行。 GROUP BY具有SQL Data Warehouse不支持的某些选项。 这些选项都有解决方法。
这些选项是
通过ROLLUP进行分组
组合组
GROUP BY 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
,此查询请求以下聚合:
您可以使用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
还有一个反馈项目,您可以在这里投票:
答案 1 :(得分:0)
我正在使用Azure Synapse Analytics(是SQL数据仓库),并且ROLLUP选项有效。下一页显示了Azure Synapse Analytics中“ GROUP BY”子句的单独定义,其中支持ROLLUP但不支持CUBE和GROUPING SETS
我认为这会随着产品的成熟而改变。