2013-04-25 3 views
2

케이스 당 행 수를 5 행으로 제한하려고합니다. 일부 경우에는 1 ~ 2 개의 행이 있지만 일부에는 15 개 이상의 행이 있습니다.ID 당 행 수 제한

이것은 사례 당 행 수를 계산하는 데 사용하는 저장 프로 시저의 예입니다. 여기

SELECT  ROW_NUMBER() OVER(partition by rce.reportruncaseid ORDER BY rce.Reportruncaseid) AS Row, rce.ReportRunCaseId AS CaseId, YEAR(rce.EcoDate) AS EcoYear 
FROM   PhdRpt.ReportCaseList AS rcl INNER JOIN 
        PhdRpt.RptCaseEco AS rce ON rce.ReportId = rcl.ReportId AND rce.ReportRunCaseId = rcl.ReportRunCaseId 
GROUP BY rce.ReportId, rce.ReportRunCaseId, YEAR(rce.EcoDate) 
Order by rce.ReportRunCaseId, YEAR(rce.EcoDate) 

이 저장 프로 시저가 생성하는 어떤의 스크린 샷이다 : 나는 where 절을 사용하는 것을 시도했다 screenshot

하지만 그것은 나를 where 절 이후에 윈도우 함수를 배치 할 수 없습니다. 또한 "행"별명을 인식하지 못합니다.

Where 절을 사용할 수 있도록 (윈도우 함수 대신에) 케이스 당 숫자 또는 행을 세는 다른 방법이 있습니까? 또는 기존 저장된 프로 시저를 사용하여 사례 당 레코드 수를 5 개로 제한하는 방법이 있습니까?

도움을 주셔서 감사합니다.

답변

1

SQL Server 지원 이후 진술서를 CTE으로 묶을 수 있습니다.

WITH records 
AS 
(
    SELECT ROW_NUMBER() OVER(PARTITION BY rce.reportruncaseid 
           ORDER BY rce.Reportruncaseid) AS Row, 
      rce.ReportRunCaseId AS CaseId, 
      YEAR(rce.EcoDate) AS EcoYear 
    FROM PhdRpt.ReportCaseList AS rcl 
       INNER JOIN PhdRpt.RptCaseEco AS rce 
        ON rce.ReportId = rcl.ReportId 
         AND rce.ReportRunCaseId = rcl.ReportRunCaseId 
    GROUP BY rce.ReportId, rce.ReportRunCaseId, YEAR(rce.EcoDate) 
) 
SELECT CaseId, EcoYear 
FROM records 
WHERE row <= 10 
ORDER BY CaseId, EcoYear 
+0

고맙습니다. 이것은 완벽하게 작동합니다. 열을 더 추가해야하는 경우 첫 번째 SELECT 문 또는 두 번째 SELECT 문에 열을 추가할까요? –

+0

'CTE' 절 안에 추가해야합니다. 외부 진술에 대한 기록은 'CTE'를 기반으로합니다. –

+0

우수. 다시 한 번 감사드립니다! –