Согласно этой документации github ROLLUP не поддерживается:
Предложение GROUP BY T-SQL объединяет данные в сводный набор строк.
В GROUP BY есть несколько параметров, которые хранилище данных SQL не поддерживает.
Эти параметры имеют обходные пути.
Эти опции
GROUP BY с ROLLUP
ГРУППОВЫЕ КОМПЛЕКТЫ
GROUP BY с кубом
Предложенный обходной путь - использовать 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
- Level2
- Итого
Вы можете смоделировать это с помощью 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