Pages

T-SQL 計算佔全部結果的比率

Sep 10, 2015
image
在 T-SQL 中欲計算某一個數值相對於查詢結果中的比率,基本的作法是第一次查詢先計算總和,再進行第二次查詢計算各筆資料的比率。
提供另一種作法,透過 SQL Server 視窗函式 ( Window Function ) 可以一次完成查詢,要計算總合用以下的語法:
sum(column) over (partition by 0)
partition by 後面原本接欄位名稱時,會計算以此欄位群組後的合計,
我嘗試放上任一個數字,就變成計算全部,這點沒找到相關文件說明。

完整範例
create table #T (ORDERNO int, Amount numeric(12,4));

insert into #T values(1, 100);
insert into #T values(2, 200);
insert into #T values(3, 300);

select * from #T;

WITH CTE as
(
 select ORDERNO, Amount
 from #T
)
select ORDERNO, Amount, convert(numeric(12,4), Amount/sum(Amount) over(partition by 0)) as Percentage
from CTE
;

drop table #T;

參考文件
OVER Clause (Transact-SQL) – SQL Server 技術文件