SQL Server で SUM の集計範囲を制御する
SQL Server の SUM() OVER を使うと、明細行を残したまま合計値を表示できます。PARTITION BY を指定すれば、顧客ごとや分類ごとに集計範囲を分けることができます。 さらに ROWS 句を使うと、そのパーティション内で現在行を基準に、どの行までを SUM の対象にするかを指定できます。 たとえば、ROWS BETWEEN 2 PRECEDING AND CURRENT ROW と書くと、現在行と直前2行を合わせた、最大3行分が集計対象になります。 SUM(amount) OVER ( PARTITION BY customer_id ORDER BY order_date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW ) この例では、顧客ごとに注文日順で並べ、現在行を含む直近最大3件の金額を合計します。このような移動合計を出したいときに役立ちます。 また、2 PRECEDING の部分を UNBOUNDED PRECEDING に変えれば、パーティションの先頭行から現在行までの累計を出すことも可能です。 SUM(amount) OVER ( PARTITION BY customer_id ORDER BY order_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) ROWS 句を使うことで、移動合計や累計など、 用途に応じて集計範囲を柔軟にコントロールできます。 OVER 句 (Transact-SQL) - SQL Server | Microsoft Learn HM インプラス株式会社