Re: [SQL ] 請問用迴圈與子查詢的效能問題
select *, 0 qty_sum into #temp from [Table]
order by part_no
declare @no char, @bal int
update #temp
set @bal = qty_sum = case when @no is null or @no <> part_no then qty
else qty + @bal end,
@no = part_no
Select * From #temp
-- 備註: @no 的 type 是要跟 part_no 一樣,我這裡先設 char
-- @bal 我設 int, 也是要跟 qty type 一樣
※ 引述《eggeggss (Suddenly I See)》之銘言:
: 小弟用的是MSSQL,希望做出累計的效果
: 假設需要累計的資料高達十萬筆
: 我的原始資料假設如下:
: id part_no qty
: 1 A 1
: 2 A 2
: 3 A 3
: 4 B 2
: 5 B 1
: .
: .
: .
: 結果要變成
: id part_no qty qty_sum(根據part_no的累計欄位)
: 1 A 1 1
: 2 A 2 3
: 3 A 3 6
: 4 B 2 2
: 5 B 1 3
: .
: .
: .
: 於是我利用以下的sub query 可以達成達成目的
: select part_no,qty_sum=(select sum(qty) from [某table] where id<a.id
: and part_no=a.part_no)
: from 某table a
: 因為之前的前輩在這段的寫法是利用回圈計算,(須繞十萬次,約一個小時),
: 小弟用profiler
: 發現整隻預儲程序的bottleneck就是這段計算
: 希望能夠改寫前輩的寫法
: 想請教 sub query與利用回圈計算累加何者效率會比較高
: 小弟有稍微測試兩者的效能,似乎看不出何者較高(因為處於多工環境,
: server分配的資源不一定均等,所以無法做banch mark)
: 感激不盡
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.88.112.42
※ 編輯: evernever 來自: 61.88.112.42 (05/07 13:58)
推
05/08 00:02, , 1F
05/08 00:02, 1F
討論串 (同標題文章)
Database 近期熱門文章
PTT數位生活區 即時熱門文章