@naidzionik
DB developer

With rollup и linked server: почему не верно считает сумму?

Добрый день!
Есть таблица
CREATE TABLE [dbo].[TestRollup]
(
	[Dim1] [nvarchar](255) NULL,
	[Dim2] [nvarchar](255) NULL,
	[Dim3] [nvarchar](255) NULL,
	[Metric] [float] NULL
)

INSERT INTO [dbo].[TestRollup]
	([Dim1],[Dim2],[Dim3],[Metric])
VALUES
	('TestDim1','Dim2Value1','Dim3Value1',1),
	('TestDim1','Dim2Value1','Dim3Value2',3),
	('TestDim1','Dim2Value2','Dim3Value1',7),
	('TestDim1','Dim2Value2','Dim3Value3',5),
	('TestDim1','Dim2Value3','Dim3Value2',NULL),
	('TestDim1','Dim2Value3','Dim3Value2',NULL),
	('TestDim1','Dim2Value3','Dim3Value5',2),
	('TestDim1','Dim2Value3','Dim3Value5',1)


запрос
SELECT
	[Dim1]
	,[Dim2]
	,[Dim3]
	,SUM([Metric]) Sum_Metric
	,GROUPING(Dim1) Grouping_Dim1
	,GROUPING(Dim2) Grouping_Dim2
	,GROUPING(Dim3) Grouping_Dim3
FROM [dbo].[TestRollup]
GROUP BY [Dim1],[Dim2],[Dim3]
WITH ROLLUP

выполняется верно, колонка Sum_Metric считается верно.
Но следующий запрос
SELECT
	[Dim1]
	,[Dim2]
	,[Dim3]
	,SUM([Metric]) Sum_Metric
	,GROUPING(Dim1) Grouping_Dim1
	,GROUPING(Dim2) Grouping_Dim2
	,GROUPING(Dim3) Grouping_Dim3
FROM <linked_server>.<name_db>.[dbo].[TestRollup]
GROUP BY [Dim1],[Dim2],[Dim3]
WITH ROLLUP

для некоторых сабтоталов выдает NULL.
Т.е. если данные берутся с залинкованного сервера и есть значения NULL для поля Metric, то сумма для сабтотала будет NULL. В чем может быть проблема? может дело в каких-то настройках линка?
  • Вопрос задан
  • 80 просмотров
Пригласить эксперта
Ответы на вопрос 1
mahoho
@mahoho
Full stack certified PHP developer.
SUM() игнорирует NULL при аггрегации и возвращает NULL, если не нашлось совпадений по заданным критериям. Если у вас в таблице именно те данные, которые вы привели в INSERT, то для комбинации 'TestDim1','Dim2Value3','Dim3Value2' SUM(metric) и должен быть NULL.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы