2016-12-06 55 views
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 子句中。

任何帮助将深表谢意。

+1

你想达到什么目的。添加样本数据和预期结果 –

+1

您正在使用哪个dbms? (某些特定于产品的SQL在那里...) – jarlh

+4

您的选择查询将只返回一条记录,您可以直接将其分配给不需要'row_number'的变量。如果您正在尝试实现其他内容,请解释 –

回答

0

从我所看到的情况来看,该查询中其余列的聚合没有被窗口化的函数。我会将它们全部更改为窗口函数(例如sum() over (partition by x) as [Field]),然后将其更改为不同的选择,看看是否有效。