0
我在我的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
所以在这里我得到一个例外,如:
消息8120,级别16,状态1,过程etl_CaseBuilder_get_Location_Compliance_Summary 41行
列 'DimCBComparisonReport.CallRef' 在选择列表中无效因为 它不包含在聚合函数或GROUP BY 子句中。
任何帮助将深表谢意。
你想达到什么目的。添加样本数据和预期结果 –
您正在使用哪个dbms? (某些特定于产品的SQL在那里...) – jarlh
您的选择查询将只返回一条记录,您可以直接将其分配给不需要'row_number'的变量。如果您正在尝试实现其他内容,请解释 –