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
