2016-12-06 4 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'が不要な変数に直接割り当てることができるレコードを1つだけ返します。あなたが何か他のものを達成しようとしているなら、 –

答えて

0

私が見るところでは、そのクエリの残りの列は、ウィンドウ関数なしで集計されます。私はすべてのウィンドウ関数(例えばsum() over (partition by x) as [Field])に変更してから、それをselect distinctに変更して、それが機能するかどうかを確認します。

関連する問題