全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2198
推到 Plurk!
推到 Facebook!

SQL 問題,怎樣實現橫向求和?

答題得分者是:st33chen
KFC123_60201
一般會員


發表:58
回覆:18
積分:15
註冊:2006-07-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-07-25 00:15:13 IP:139.78.xxx.xxx 訂閱
我的資料庫中每一個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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-07-25 07:37:02 IP:59.120.xxx.xxx 訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-07-25 14:11:59 IP:122.116.xxx.xxx 訂閱
設一個 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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-07-25 14:28:25 IP:139.78.xxx.xxx 訂閱
謝謝。我在用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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-07-25 16:26:57 IP:218.210.xxx.xxx 訂閱
那這樣還比較建議你用程式跑迴圈寫 SQL Command 再傳入 Access,
來取得你要的資料似乎來的快點!!!!
------
價值的展現,來自於你用哪一個角度來看待它!!
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-08-07 13:24:00 IP:122.116.xxx.xxx 訂閱
我想有兩個方法
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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-08-07 13:57:10 IP:122.116.xxx.xxx 訂閱
如果連一次的 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 (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
系統時間:2024-05-03 7:26:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!