Top N implique une sorte d'ordre, que vous n'avez pas fourni, donc je suppose un ordre aléatoire.
Vous pouvez modifier cela sur la clause OVER du ROW_NUMBER().
Essayez quelque chose comme
DECLARE @Table TABLE(
Price FLOAT
)
INSERT INTO @Table SELECT 1
INSERT INTO @Table SELECT 11
INSERT INTO @Table SELECT 12
INSERT INTO @Table SELECT 15
INSERT INTO @Table SELECT 10
INSERT INTO @Table SELECT 65
INSERT INTO @Table SELECT 100
DECLARE @TotalPrice FLOAT
SELECT @TotalPrice = 100
;WITH Vals AS (
SELECT *,
ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) RNR
FROM @Table
)
, Totals AS (
SELECT v.RNR,
SUM(vP.Price) TotalPrice
FROM Vals v LEFT JOIN
Vals vP ON v.RNR >= vP.RNR
GROUP BY v.RNR
)
, LimitValue AS (
SELECT TOP 1
RNR
FROM Totals
WHERE TotalPrice >= @TotalPrice
ORDER BY RNR
)
SELECT *
FROM Vals
WHERE RNR <= (
SELECT RNR
FROM LimitValue
)
@ user384080 - 1. quelle base de données? 2. La somme des prix selon quels critères? – InSane
Souhaitez-vous additionner le prix groupé par une autre colonne et le tester? – MikeAinOz
Je pense que vous avez tous mal compris la question désolé .. Fondamentalement, je dois additionner la colonne des prix et si la même a atteint la limite, puis prendre les dossiers. Donc, si le prix dans l'enregistrement # 1 + le prix dans l'enregistrement # 2 + le prix dans l'enregistrement # 3 a atteint la limite alors prenez ces trois enregistrements sinon continuez à boucler à travers les enregistrements jusqu'à atteindre la limite – user384080