2 votes

Limitez le nombre de lignes par ID

Je essaie de limiter le nombre de lignes par cas à seulement 5 lignes. Certains cas ont seulement 1 ou 2 lignes, mais d'autres en ont 15 ou plus.

Ceci est un exemple d'une procédure stockée que j'utilise pour compter le nombre de lignes par cas.

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)

Voici une capture d'écran de ce que cette procédure stockée produit: capture d'écran

J'ai essayé d'utiliser la clause where mais elle ne me permet pas de placer une fonction de fenêtre après la clause where. Elle ne reconnaît pas non plus mon alias "Row".

Y a-t-il un autre moyen de compter le nombre de lignes par cas (au lieu d'une fonction de fenêtre) pour que je puisse utiliser la clause where? Ou existe-t-il un moyen de limiter les enregistrements par cas à 5 en utilisant ma procédure stockée existante?

Merci d'avance pour votre aide.

1voto

John Woo Points 132738

Vous pouvez envelopper votre déclaration dans un CTE car SQL Server le prend en charge.

AVEC enregistrements
COMME
(
    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   enregistrements
WHERE  row <= 10
ORDER  BY CaseId, EcoYear

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X