SQL加總會亂跳.. |
答題得分者是:st33chen
|
g9614721
一般會員 發表:27 回覆:51 積分:15 註冊:2008-07-23 發送簡訊給我 |
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 發送簡訊給我 |
試試看是不是少刮起來了
你寫的只有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 發送簡訊給我 |
您的問題在於沒有把 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安捏~是哪裡錯了?
------
價值的展現,來自於你用哪一個角度來看待它!! |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
您好
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 發送簡訊給我 |
|
g9614721
一般會員 發表:27 回覆:51 積分:15 註冊:2008-07-23 發送簡訊給我 |
= ="
說來慚愧... 因為不知道怎麼寫在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 發送簡訊給我 |
|
g9614721
一般會員 發表:27 回覆:51 積分:15 註冊:2008-07-23 發送簡訊給我 |
方法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 是什麼? 而且錯誤訊息是什麼? |
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
您好,
第四法好像少一個 ) 號, 且 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 發送簡訊給我 |
第四法 加入一個括號 還是錯誤
[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 是什麼? 而且錯誤訊息是什麼? |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |