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

SQL加總會亂跳..

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


發表:27
回覆:51
積分:15
註冊:2008-07-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-03-02 03:11:18 IP:220.131.xxx.xxx 訂閱
form1.Query1.Close;
form1.Query2.Close;
form1.Query3.Close;
form1.Query1.SQL.Clear;
form1.Query2.SQL.Clear;
form1.Query3.SQL.Clear;
form1.Query1.SQL.Add('Select sum(進貨數量) as 進貨累計量,max(進貨數量) as 最大進貨量,min(進貨數量) as 最小進貨量,avg(進貨數量) as 平均進貨量 from A_IN where 物品名稱="' dblookupcombobox1.text '"');
form1.Query2.SQL.Add('Select sum(領用數量) as 領用累計量,max(領用數量) as 最大領用量,min(領用數量) as 最小領用量,avg(領用數量) as 平均領用量 from A_out where 物品名稱="' dblookupcombobox1.text '"');
form1.Query3.SQL.Add('select sum(進貨數量) - SUM(領用數量) as 庫存數量 from A_in,A_out where 物品名稱="' dblookupcombobox1.text '"');
form1.Query1.Open;
form1.Query2.Open;
form1.Query3.Open;

= = QUERY1 QUERY2 的計算都沒問題
但QUERY3的加總 就亂跳了 並不是我想要的庫存量
那a安捏~是哪裡錯了?
frappe
中階會員


發表:88
回覆:114
積分:95
註冊:2008-10-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-03-02 05:10:56 IP:115.83.xxx.xxx 訂閱
試試看是不是少刮起來了
你寫的只有SUM(領用數量) as 庫存數量, 而不是sum(進貨數量) - SUM(領用數量)
form1.Query3.SQL.Add('select (sum(進貨數量) - SUM(領用數量)) as 庫存數量 from A_in,A_out where 物品名稱="' dblookupcombobox1.text '"');


===================引 用 g9614721 文 章===================
form1.Query1.Close;
form1.Query2.Close;
form1.Query3.Close;
form1.Query1.SQL.Clear;
form1.Query2.SQL.Clear;
form1.Query3.SQL.Clear;
form1.Query1.SQL.Add('Select sum(進貨數量) as 進貨累計量,max(進貨數量) as 最大進貨量,min(進貨數量) as 最小進貨量,avg(進貨數量) as 平均進貨量 from A_IN where 物品名稱="' dblookupcombobox1.text '"');
form1.Query2.SQL.Add('Select sum(領用數量) as 領用累計量,max(領用數量) as 最大領用量,min(領用數量) as 最小領用量,avg(領用數量) as 平均領用量 from A_out where 物品名稱="' dblookupcombobox1.text '"');
form1.Query3.SQL.Add('select sum(進貨數量) - SUM(領用數量) as 庫存數量 from A_in,A_out where 物品名稱="' dblookupcombobox1.text '"');
form1.Query1.Open;
form1.Query2.Open;
form1.Query3.Open;

= = QUERY1 QUERY2 的計算都沒問題
但QUERY3的加總 就亂跳了 並不是我想要的庫存量
那a安捏~是哪裡錯了?
careychen
尊榮會員


發表:41
回覆:580
積分:959
註冊:2004-03-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-03-02 09:13:32 IP:60.248.xxx.xxx 訂閱
您的問題在於沒有把 a_in 和 a_out 做關聯,
請試試兩種寫法
1、在 from 的後面修改
(下面括號看你的需要用一種就行了,注意沒有 Right 和 full ,如果需要的話 where 條件式要跟著改一下)
[code delphi]
from a_in [left, inner] join a_out on a_in.物品名稱=a_out.物品名稱 where a.物品名稱...
[/code]

2、from 不改,在 where 後面修改 (這種寫法基本上是過時的,新版 SQL 較建議上面那種的方法)
[code delphi]
from a_in, a_out where a_in.物品名稱=a_out.物品名稱 and a.物品名稱=......
[/code]

===================引 用 g9614721 文 章===================
form1.Query1.Close;
form1.Query2.Close;
form1.Query3.Close;
form1.Query1.SQL.Clear;
form1.Query2.SQL.Clear;
form1.Query3.SQL.Clear;
form1.Query1.SQL.Add('Select sum(進貨數量) as 進貨累計量,max(進貨數量) as 最大進貨量,min(進貨數量) as 最小進貨量,avg(進貨數量) as 平均進貨量 from A_IN where 物品名稱="' dblookupcombobox1.text '"');
form1.Query2.SQL.Add('Select sum(領用數量) as 領用累計量,max(領用數量) as 最大領用量,min(領用數量) as 最小領用量,avg(領用數量) as 平均領用量 from A_out where 物品名稱="' dblookupcombobox1.text '"');
form1.Query3.SQL.Add('select sum(進貨數量) - SUM(領用數量) as 庫存數量 from A_in,A_out where 物品名稱="' dblookupcombobox1.text '"');
form1.Query1.Open;
form1.Query2.Open;
form1.Query3.Open;

= = QUERY1 QUERY2 的計算都沒問題
但QUERY3的加總 就亂跳了 並不是我想要的庫存量
那a安捏~是哪裡錯了?
------
價值的展現,來自於你用哪一個角度來看待它!!
編輯記錄
careychen 重新編輯於 2009-03-02 09:16:50, 註解 無‧
careychen 重新編輯於 2009-03-02 09:21:10, 註解 無‧
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-03-02 10:36:30 IP:61.67.xxx.xxx 未訂閱
form1.Query3.SQL.Add('select sum(進貨數量) - SUM(領用數量) as 庫存數量 from A_in,A_out where  物品名稱="'+dblookupcombobox1.text+'"');

你這是兩份 table表要結合, 這樣的寫法不對, 應該要指明table 的來源

form1.Query3.SQL.Add('select sum(a.進貨數量) - SUM(b.領用數量) as 庫存數量 from A_in a, A_out b where a.物品名稱=" ' dblookupcombobox1.text ' " and b.物品名稱=" ' dblookupcombobox1.text '"');



g9614721
一般會員


發表:27
回覆:51
積分:15
註冊:2008-07-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-03-02 13:28:26 IP:140.125.xxx.xxx 訂閱
C大的第一種方法,run的時候有錯誤....且我看不懂left= =的用法
第二種方法 可以用,但後面C大是不是打錯了?

版主你的方法可以RUN ~但庫存數量沒有數字

下面是我修改過的程式碼~但發現數字還是亂跳= ="
form1.Query1.Close;
form1.Query2.Close;
form1.Query3.Close;
form1.Query1.SQL.Clear;
form1.Query2.SQL.Clear;
form1.Query3.SQL.Clear;

form1.Query1.SQL.Add('Select sum(進貨數量) as 進貨累計量,max(進貨數量) as 最大進貨量,min(進貨數量) as 最小進貨量,avg(進貨數量) as 平均進貨量 from A_IN where 物品名稱="' dblookupcombobox1.text '"');

form1.Query2.SQL.Add('Select sum(領用數量) as 領用累計量,max(領用數量) as 最大領用量,min(領用數量) as 最小領用量,avg(領用數量) as 平均領用量 from A_out where 物品名稱="' dblookupcombobox1.text '"');

form1.Query3.SQL.Add('select sum(進貨數量) - SUM(領用數量) as 庫存數量 from a_in, a_out where a_in.物品名稱=a_out.物品名稱 and a_out.物品名稱="' dblookupcombobox1.text '"');

form1.Query1.Open;
form1.Query2.Open;
form1.Query3.Open;


編輯記錄
g9614721 重新編輯於 2009-03-02 13:29:17, 註解 無‧
st33chen
尊榮會員


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-03-02 13:58:11 IP:122.116.xxx.xxx 未訂閱
您好

sum(進貨數量) 和 SUM(領用數量) 分別在 query1 及 query2 有值,
直接拿來用就好, 有需要再寫一個 query3 來讓電腦做相同的事嗎?

如果您一定要寫 query3, 那要用 full join 的方式, 否則會有一邊有資料, 另一邊沒資料時 join 不起來的情形
但我的經驗告訴我, 有些 db engine 對 full join 的定義不太一樣
所以建議用 union all 的方式來寫 query3
例如:
select sum(qty) as 庫存數量 from (
select sum(進貨數量) as qty from a_in where 物品名稱= ...
union all
select -SUM(領用數量) from a_out where 物品名稱=...
)

不過, 我還是覺得沒必要寫 query3

------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
careychen
尊榮會員


發表:41
回覆:580
積分:959
註冊:2004-03-03

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-03-02 14:02:51 IP:60.248.xxx.xxx 訂閱
小弟是覺得,Query3 用不用是無所謂,但... 先把 sql 學好一下比較要緊

上面的 Sample 中那個 [left, inner] join 是兩個選一個
也就是
from a_in left join a_out on a_in.物品名稱=a_out.物品名稱

from a_in inner join a_out on a_in.物品名稱=a_out.物品名稱

您該不會是整句都丟上去了???



------
價值的展現,來自於你用哪一個角度來看待它!!
g9614721
一般會員


發表:27
回覆:51
積分:15
註冊:2008-07-23

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-03-02 16:16:13 IP:140.125.xxx.xxx 訂閱
= ="
說來慚愧...
因為不知道怎麼寫在query1 和query2 利用兩張表來一次算完庫存量
才會寫query3來做...
下面的left 和inner 我還是沒辦法RUN...
===================引 用 careychen 文 章===================
小弟是覺得,Query3 用不用是無所謂,但... 先把 sql 學好一下比較要緊

上面的 Sample 中那個 [left, inner] join 是兩個選一個
也就是
from a_in left join a_out on a_in.物品名稱=a_out.物品名稱

from a_in inner join a_out on a_in.物品名稱=a_out.物品名稱

您該不會是整句都丟上去了???



careychen
尊榮會員


發表:41
回覆:580
積分:959
註冊:2004-03-03

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-03-02 16:21:51 IP:60.248.xxx.xxx 訂閱
那您現在是怎麼寫的,請把他 po 出來,不然不大知道您的問題是什麼,而您現在用的 DB 是什麼?
而且錯誤訊息是什麼?
------
價值的展現,來自於你用哪一個角度來看待它!!
g9614721
一般會員


發表:27
回覆:51
積分:15
註冊:2008-07-23

發送簡訊給我
#10 引用回覆 回覆 發表時間:2009-03-02 17:39:41 IP:140.125.xxx.xxx 訂閱
方法1  
form1.Query3.SQL.Add('select sum(進貨數量) - SUM(領用數量) as 庫存數量 from a_in, a_out where a_in.物品名稱=a_out.物品名稱 and a_out.物品名稱="' dblookupcombobox1.text '"');

方法2
form1.Query3.SQL.Add('select sum(進貨數量) - SUM(領用數量) as 庫存數量 from a_in left join a_out on a_in.物品名稱=a_out.物品名稱 where a_in.物品名稱="' dblookupcombobox1.text '"');

方法3
form1.Query3.SQL.Add('select sum(進貨數量) - SUM(領用數量) as 庫存數量 from a_in inner join a_out on a_in.物品名稱=a_out.物品名稱 where a_in.物品名稱="' dblookupcombobox1.text '"');


以上三個方法算出來,
庫存數量都是10800 如我前面所貼的圖

方法4 沒辦法RUN
form1.Query3.SQL.Add('select sum(qty) as 庫存數量 from (select sum(進貨數量) as qty from a_in where 物品名稱="' dblookupcombobox1.text '"
union all
select -SUM(領用數量) from a_out where 物品名稱="' dblookupcombobox1.text '"')

我的dB 是 paradox 7


===================引 用 careychen 文 章===================
那您現在是怎麼寫的,請把他 po 出來,不然不大知道您的問題是什麼,而您現在用的 DB 是什麼?
而且錯誤訊息是什麼?
編輯記錄
g9614721 重新編輯於 2009-03-02 17:49:30, 註解 無‧
g9614721 重新編輯於 2009-03-02 17:50:43, 註解 無‧
st33chen
尊榮會員


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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2009-03-02 23:18:44 IP:122.116.xxx.xxx 未訂閱
您好,
第四法好像少一個 ) 號, 且 UNION ALL 前後要有空格 :
form1.Query3.SQL.Add('select sum(qty) as 庫存數量 from (select sum(進貨數量) as qty from a_in where 物品名稱="' dblookupcombobox1.text '"
union all
select -SUM(領用數量) from a_out where 物品名稱="' dblookupcombobox1.text '")');

又, 您 join 的寫法經過排列組合再加總數量會不對
(由您的圖來看, A 進貨兩筆, 領用兩筆, 經排列組合後再加總數量多一倍)
您仔細看一下就了解了.


===================引 用 g9614721 文 章===================
方法1
form1.Query3.SQL.Add('select sum(進貨數量) - SUM(領用數量) as 庫存數量 from a_in, a_out where a_in.物品名稱=a_out.物品名稱 and a_out.物品名稱="' dblookupcombobox1.text '"');

方法2
form1.Query3.SQL.Add('select sum(進貨數量) - SUM(領用數量) as 庫存數量 from a_in left join a_out on a_in.物品名稱=a_out.物品名稱 where a_in.物品名稱="' dblookupcombobox1.text '"');

方法3
form1.Query3.SQL.Add('select sum(進貨數量) - SUM(領用數量) as 庫存數量 from a_in inner join a_out on a_in.物品名稱=a_out.物品名稱 where a_in.物品名稱="' dblookupcombobox1.text '"');


以上三個方法算出來,
庫存數量都是10800 如我前面所貼的圖

方法4 沒辦法RUN
form1.Query3.SQL.Add('select sum(qty) as 庫存數量 from (select sum(進貨數量) as qty from a_in where 物品名稱="' dblookupcombobox1.text '"
union all
select -SUM(領用數量) from a_out where 物品名稱="' dblookupcombobox1.text '"')

我的dB 是 paradox 7


===================引 用 careychen 文 章===================
那您現在是怎麼寫的,請把他 po 出來,不然不大知道您的問題是什麼,而您現在用的 DB 是什麼?
而且錯誤訊息是什麼?
------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
g9614721
一般會員


發表:27
回覆:51
積分:15
註冊:2008-07-23

發送簡訊給我
#12 引用回覆 回覆 發表時間:2009-03-03 15:49:30 IP:140.125.xxx.xxx 訂閱
第四法 加入一個括號 還是錯誤 
[Error] Unit1.pas(74): Unterminated string

另外join的用法 我真的不太會= ="
===================引 用 st33chen 文 章===================
您好,
第四法好像少一個 ) 號, 且 UNION ALL 前後要有空格 :
form1.Query3.SQL.Add('select sum(qty) as 庫存數量 from (select sum(進貨數量) as qty from a_in where 物品名稱="' dblookupcombobox1.text '"
union all
select -SUM(領用數量) from a_out where 物品名稱="' dblookupcombobox1.text '")');

又, 您 join 的寫法經過排列組合再加總數量會不對
(由您的圖來看, A 進貨兩筆, 領用兩筆, 經排列組合後再加總數量多一倍)
您仔細看一下就了解了.


===================引 用 g9614721 文 章===================
方法1
form1.Query3.SQL.Add('select sum(進貨數量) - SUM(領用數量) as 庫存數量 from a_in, a_out where a_in.物品名稱=a_out.物品名稱 and a_out.物品名稱="' dblookupcombobox1.text '"');

方法2
form1.Query3.SQL.Add('select sum(進貨數量) - SUM(領用數量) as 庫存數量 from a_in left join a_out on a_in.物品名稱=a_out.物品名稱 where a_in.物品名稱="' dblookupcombobox1.text '"');

方法3
form1.Query3.SQL.Add('select sum(進貨數量) - SUM(領用數量) as 庫存數量 from a_in inner join a_out on a_in.物品名稱=a_out.物品名稱 where a_in.物品名稱="' dblookupcombobox1.text '"');


以上三個方法算出來,
庫存數量都是10800 如我前面所貼的圖

方法4 沒辦法RUN
form1.Query3.SQL.Add('select sum(qty) as 庫存數量 from (select sum(進貨數量) as qty from a_in where 物品名稱="' dblookupcombobox1.text '"
union all
select -SUM(領用數量) from a_out where 物品名稱="' dblookupcombobox1.text '"')

我的dB 是 paradox 7


===================引 用 careychen 文 章===================
那您現在是怎麼寫的,請把他 po 出來,不然不大知道您的問題是什麼,而您現在用的 DB 是什麼?
而且錯誤訊息是什麼?
系統時間:2024-05-15 6:21:13
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!