2016-12-06 62 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]),然後將其更改爲不同的選擇,看看是否有效。