Я использую оператор MERGE
, в запросе SELECT
Я пытаюсь использовать функцию LAST_VALUE
внутри оператора CASE
с различными типами сводки (например, SUM, AVG и т. Д.) С агрегированными функциями. , Я хочу исключить поля [Value]
, [Target]
и [Budget]
из предложения GROUP BY
. Я использую синтаксис OVER ORDER BY
, но постоянно получаю следующую ошибку:
Сообщение 8120, Уровень 16, Состояние 1, Строка 12
Столбец '@ TempFact_KPI.Value' недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.
КОД:
CREATE TYPE [dbo].[TempFact_KPI] AS TABLE(
[PeriodKey] [uniqueidentifier] NULL,
[KPIKey] [uniqueidentifier] NULL,
[SummaryType] [nvarchar](50) NULL,
[PeriodDateTime] [datetime] NULL,
[Value] [real] NULL,
[Target] [real] NULL,
[Budget] [real] NULL
)
GO
Хранимая процедура:
SELECT DISTINCT
[PeriodKey],
[KPIKey],
CASE [SummaryType]
WHEN 'Sum' THEN SUM([Value])
WHEN 'Count' THEN COUNT([Value])
WHEN 'Mean' THEN AVG([Value])
WHEN 'Maximum' THEN MAX([Value])
WHEN 'Minimum' THEN MIN([Value])
WHEN 'Last' THEN LAST_VALUE([Value]) OVER (ORDER BY [PeriodDateTime] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
ELSE [Value]
END as [Value],
CASE [SummaryType]
WHEN 'Sum' THEN SUM([Target])
WHEN 'Count' THEN COUNT([Target])
WHEN 'Mean' THEN AVG([Target])
WHEN 'Maximum' THEN MAX([Target])
WHEN 'Minimum' THEN MIN([Target])
WHEN 'Last' THEN LAST_VALUE([Target]) OVER (ORDER BY [PeriodDateTime] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
ELSE [Target]
END AS [Target],
CASE [SummaryType]
WHEN 'Sum' THEN SUM([Budget])
WHEN 'Count' THEN COUNT([Budget])
WHEN 'Mean' THEN AVG([Budget])
WHEN 'Maximum' THEN MAX([Budget])
WHEN 'Minimum' THEN MIN([Budget])
WHEN 'Last' THEN LAST_VALUE([Budget]) OVER (ORDER BY [PeriodDateTime] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
ELSE [Budget]
END AS [Budget]
FROM
@TempFact_KPI
GROUP BY
[PeriodKey], [KPIKey], [SummaryType]
Я посмотрел опубликованные предложения Запрос минимального, максимального, среднего и последнего значения в TSQL и Поле исключения SQL из GROUP BY в результатах, но используется в WHERE , но он все еще не дает желаемых результатов