У меня есть следующий сценарий в моем SQL-запросе. Я должен использовать ROW_NUMBER()
в моем запросе, где некоторые агрегированные функции также используются для получения результата.Как использовать ROW_NUMBER() вместе с агрегатными функциями?
SELECT
@TotalRequests = ReportCount.TotalCount,
@TotalTimeToRespond = ReportCount.TotalTimeToRespond,
@TotalRequestsHavingQnA = ReportCount.TotalRequestsHavingQnA,
@ResponseCompliance = ReportCount.ResponseCompliance,
@TotalSubmissions = ReportCount.TotalSubmissions
FROM
(SELECT
TotalCount = Count(1),
TotalTimeToRespond = SUM(Datediff(DAY, DCR.DateReceivedInCB, DCR.DueDate)),
TotalRequestsHavingQnA = SUM(CASE
WHEN DCR.NoOfQuestionsAsked IS NULL
OR DCR.NoOfQuestionsAsked = 0 THEN 0
ELSE 1
END),
ResponseCompliance = Sum(CASE
WHEN DCR.NoOfQuestionsAsked IS NULL
OR DCR.NoOfQuestionsAsked = 0 THEN 0
ELSE (Cast(DCR.NoOfQuestionsAnswered AS DECIMAL) * 100)/Cast(DCR.NoOfQuestionsAsked AS DECIMAL)
END),
TotalSubmissions = Sum(CASE
WHEN DCR.DateSubmitted IS NOT NULL THEN 1
ELSE 0
END),
rowNumber = Row_number()
OVER (
PARTITION BY DCR.callref
ORDER BY DCR.DateSubmitted DESC)
FROM
DimCBComparisonReport DCR
INNER JOIN
DimClientLoc DCL ON DCR.ClientLocKey = DCL.ClientLocKey
WHERE
Ltrim(Rtrim(DCL.LocId)) IN (SELECT PARAM
FROM Fn_splitparam(@LocationIdList, ','))
AND (CASE
WHEN @EnabledDateType = 'D' THEN DCR.DueDate
ELSE DCR.DateSubmitted
END) BETWEEN @StartDate AND @EndDate
AND DCL.ContractId = @ContractRef
AND DCR.EmployeeKey IS NOT NULL) ReportCount
WHERE
ReportCount.rowNumber = 1
Так вот я получаю исключение, как:
Msg 8120, Level 16, State 1, процедура etl_CaseBuilder_get_Location_Compliance_Summary, Линия 41
Колонка 'DimCBComparisonReport.CallRef' недопустим в списке выбора потому что не содержится ни в агрегатной функции, ни в предложении GROUP BY .
Любая помощь будет глубоко оценена.
Что вы пытаетесь достичь. Добавить пример данных и ожидаемый результат –
Какие dbms вы используете? (Некоторый специфический SQL-код продукта ...) – jarlh
В вашем выбранном запросе будет возвращена только одна запись, которую вы можете напрямую назначить переменным, вам не нужно 'row_number'. Если вы пытаетесь достичь чего-то еще, то объясните, –