SQL 問題,怎樣實現橫向求和? |
答題得分者是:st33chen
|
KFC123_60201
一般會員 發表:58 回覆:18 積分:15 註冊:2006-07-25 發送簡訊給我 |
我的資料庫中每一個record有大約30個數值型的field,總共有大約10000個record,我想第五個field到最後一個field的和求出來,但是SUM函數只能用在record與record之間的同一個field上。我現在是只好把SQL寫為
[code sql] SELECT (field5 field6 field7 field8 ...) AS TOTAL FROM MyTable [/code] 其中 "..." 代表一直寫到 field30 我還要利用這個TOTAL來計算其它值,如果按上面的這樣寫,SQL就會變得非常的長,不知有沒有辦法實現橫向求和?謝謝 |
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
use StoreProcedure
===================引 用 KFC123_60201 文 章=================== 我的資料庫中每一個record有大約30個數值型的field,總共有大約10000個record,我想第五個field到最後一個field的和求出來,但是SUM函數只能用在record與record之間的同一個field上。我現在是只好把SQL寫為 [code sql] SELECT (field5 field6 field7 field8 ...) AS TOTAL FROM MyTable [/code] 其中 "..." 代表一直寫到 field30 我還要利用這個TOTAL來計算其它值,如果按上面的這樣寫,SQL就會變得非常的長,不知有沒有辦法實現橫向求和?謝謝 |
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
設一個 stored function, 例如 sum_flds, 然後 select ..., sum_flds, ... from xxx
或是用 dynamic sql, oracle 的話請參考 http://www.cs.umbc.edu/help/oracle8/server.815/a68022/dynsql.htm#588 謝謝
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲. |
KFC123_60201
一般會員 發表:58 回覆:18 積分:15 註冊:2006-07-25 發送簡訊給我 |
謝謝。我在用ACCESS,沒用過stored function,能否給個例子?
===================引 用 st33chen 文 章=================== 設一個 stored function, 例如 sum_flds, 然後 select ..., sum_flds, ... from xxx 或是用 dynamic sql, oracle 的話請參考 http://www.cs.umbc.edu/help/oracle8/server.815/a68022/dynsql.htm#588 謝謝 |
careychen
尊榮會員 發表:41 回覆:580 積分:959 註冊:2004-03-03 發送簡訊給我 |
|
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
我想有兩個方法
1. total 值的其他運算一定要放在 query 中算出來, 那建議用兩層 select, 可以少一些工夫, 效率可能稍差 : select TOTAL*3 AS TOTAL3, TOTAL 1000 AS TOTAL1000, .... FROM ( SELECT (field5 field6 field7 field8 ...) AS TOTAL FROM MyTable ) 2. TOTAL 值的其他運算可以放到 DELPHI 中, 例 : query1.sql.text := 'select * from mytable'; query1.open; if not query1.eof do begin total := 0; for ii := 5 to 30 do total := total query1.fieldbyname('field' inttostr(ii)).asfloat; 或 for ii := 5 to 30 do total := total query1.fields[ii].asfloat; ... total 的其他運算 ... query1.next; end; ===================引 用 KFC123_60201 文 章=================== 我的資料庫中每一個record有大約30個數值型的field,總共有大約10000個record,我想第五個field到最後一個field的和求出來,但是SUM函數只能用在record與record之間的同一個field上。我現在是只好把SQL寫為 [code sql] SELECT (field5 field6 field7 field8 ...) AS TOTAL FROM MyTable [/code] 其中 "..." 代表一直寫到 field30 我還要利用這個TOTAL來計算其它值,如果按上面的這樣寫,SQL就會變得非常的長,不知有沒有辦法實現橫向求和?謝謝
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲. |
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
如果連一次的 field5+field6+...+field30 都不想打的話
可用程式去組成 sql statement astr := ''; for ii := 5 to 30 do astr := astr ' field' inttostr(ii); query1.sql.text := 'select ' copy(astr,2,length(astr)-1);
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |