SUM(FileSize)<1000000の10行以下を選択する必要があります。結果はAttachmentIdで並べ替える必要があります。単一のFileSizeが制限を超えた場合、その行だけが選択されても(他の行は選択されなくても)問題ないとしましょう。
理想的には、これ以上ステートメントを含まない単なる選択クエリにしたいと思います。
表は次のとおりです。
CREATE TABLE [Attachment](
[AttachmentId] [int] NOT NULL,
[FileSize] [int] NOT NULL
)
助けてください。
更新されました。ほとんどの読者にとって要件が不明確であると聞いて申し訳ありません。グループ化を行う必要はありません。私が取得する必要があるのは、最初の10行以下の単純なものだけです。FileSizeの合計が1000000を超える場合は、10未満になります。FileSizeが1000000以上の場合は、1行のみになります。サーバーはSQL2008です。
更新されました。ニコラに感謝します。そこに到達していますが、最初の行がFileSizeの1000000を超えた場合のケースの実装方法がまだわかりません。
SELECT TOP 10 a.AttachmentId, rt.runningTotal
FROM Attachment a
CROSS APPLY (SELECT SUM(aa.FileSize) AS runningTotal
FROM Attachment aa
WHERE aa.AttachmentId <= a.AttachmentId
) AS rt
GROUP BY a.AttachmentId, rt.runningTotal
HAVING rt.runningTotal < 1000000
ORDER BY a.AttachmentId
解決策。これは私が答えとして受け入れるStuartからのコード(わずかに変更された)です。スチュアートに感謝します!:
WITH CTE
AS ( SELECT TOP 10 AttachmentId, FileSize
, RunningID = ROW_NUMBER() OVER (ORDER BY AttachmentId)
FROM Attachment
)
SELECT AttachmentId, FileSize
FROM CTE AS a
WHERE (SELECT SUM(FileSize)
FROM CTE
WHERE RunningID <= a.RunningID
) <= 10000000
OR a.RunningID = 1