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

急阿= =弄了好久還是錯誤阿!

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


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-10-22 11:18:13 IP:140.125.xxx.xxx 訂閱
我的table1 是進貨量 
我的table2 是領用量
我想要經由edit 讓使用者輸入物品名稱後
可以查出該物品的進出貨 明細
依照日期排序
然後SUM該物品的"進貨量(KG)" - SUM該物品的"領用量(KG)" =顯示在"庫存量(KG)"
(能達到顯示在同一張gird嗎?)

我不知道怎麼把下面這段↓
SELECT SUN(A.A) AS AIN, // A總進貨量
SUN(A.B) AS BIN, // B總進貨量
SUN(A.C) AS CIN, //C總進貨量
SUN(B.A), AS AOUT // A總出貨量
SUN(B.B), AS BOUT // B總出貨量
SUN(B.C), /AS COUT // C總出貨量
SUN(A.A)-SUN(B.A) AS A, // A庫存
SUN(A.B)-SUN(B.B) AS B, // B庫存
SUN(A.C)-SUN(B.C) AS C // C庫存
FROM A,B WHERE A.PKEY=B.PKEY


裝到下面這段去= ="

procedure TForm1.Button29Click(Sender: TObject);
begin
if edit16.text<>'' then
begin
form1.Query2.Close;
form1.Query2.SQL.Clear;
form1.Query2.SQL.Add('Select * from 領用量 where 物品名稱="' edit16.text '"');
form1.Query2.Open;
end
else
showmessage('請輸入物品名稱');

end;
end.
編輯記錄
g9614721 重新編輯於 2008-10-22 11:19:01, 註解 無‧
st33chen
尊榮會員


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-10-22 13:10:09 IP:122.116.xxx.xxx 未訂閱
您好,
從您的問題描述, 想像我的解法:

-- 明細
select * from (
Select 日期, 進貨量, 0 as 領用量, 0 as 庫存量
from 進貨檔
where 物品名稱="' edit16.text '"'
union all
Select 日期, 0 as 進貨量, 領用量, 0 as 庫存量
from 領用檔
where 物品名稱="' edit16.text '"'
order by 日期
)
-- 為了把加總放在同一個 grid
union all
select ' ', sum(進貨量), sum(領用量), sum(進貨量)-sum(領用量)
from (
Select 日期, 進貨量, 0 as 領用量, 0 as 庫存量
from 進貨檔
where 物品名稱="' edit16.text '"'
union all
Select 日期, 0 as 進貨量, 領用量, 0 as 庫存量
from 領用檔
where 物品名稱="' edit16.text '"'
)

這是單從 sql 著手, 好像有可以做加總的 dbgrid 可以用, 那就不需要 "為了把加總放在同一個 grid "那一段.

參考一下

------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2008-10-22 14:02:42, 註解 無‧
st33chen 重新編輯於 2008-10-22 14:03:39, 註解 無‧
g9614721
一般會員


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-10-22 13:51:25 IP:67.15.xxx.xxx 訂閱

===================引 用 st33chen 文 章===================
您好,
從您的問題描述, 想像我的解法:

-- 明細
select * from (
Select 日期, 進貨量, 0 as 領用量, 0 as 庫存量
from 進貨檔

(我的TABLE 進貨量只有進貨量的資料 沒有領用量的資料)
(領用的資料再另一個table"領用量" 該怎麼改呢? )
另外 我的欄位名稱是 領用量(kg) 請問在sql中要幫他 什麼括號或引號嗎?

where 物品名稱="' edit16.text '"'
union all
(請問union all是什麼意思?)
Select 日期, 0 as 進貨量, 領用量, 0 as 庫存量
from 進貨檔
where 物品名稱="' edit16.text '"'
order by 日期
)
-- 為了把加總放在同一個 grid
union all
select ' ', sum(進貨量), sum(領用量), sum(進貨量)-sum(領用量)
我的欄位名稱是 進貨量(kg) 領用量(kg) 所以我該這樣打嗎?→ sum(領用量(kg))
from (
Select 日期, 進貨量, 0 as 領用量, 0 as 庫存量
from 進貨檔
(可否問一下 0 的用意是什麼?)
where 物品名稱="' edit16.text '"'
union all
Select 日期, 0 as 進貨量, 領用量, 0 as 庫存量
from 進貨檔
where 物品名稱="' edit16.text '"'
)

(不好意思 我不是學這方面的 = ="但因為剛好需要用到)
這是單從 sql 著手, 好像有可以做加總的 dbgrid 可以用, 那就不需要 "為了把加總放在同一個 grid "那一段.

參考一下


我稍微修改了一下 名字


TABLE1= 購入量
日期, 物品名稱, 進貨數量(kg)

TABLE2=領用量
日期, 物品, 領用數量(kg)

編輯記錄
g9614721 重新編輯於 2008-10-22 14:11:42, 註解 無‧
g9614721 重新編輯於 2008-10-22 14:12:20, 註解 無‧
st33chen
尊榮會員


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-10-22 14:16:45 IP:122.116.xxx.xxx 未訂閱
對不起, 我剛剛因為寫好一段後copy 成第二段, 沒改到 領用檔, 現已改好, 

依我了解, 如果 A TABLE 有三筆, B TABLE 有四筆
那麼 SELECT .... FROM A, B 會有十二筆 ( 排列組合 3*4 )

SELECT ... FROM A
UNION ALL
SELECT ... FROM B
則會得到 7 (3 4) 筆
各有適用的地方, 我覺得您的問題比較像用 UNION ALL

在用 UNION ALL 時, 各個 SELECT 的欄位數要相等, 各欄位的屬性要相同,
所以會在 SELECT 進貨檔時 加一個 領用量的欄位, 因進貨檔無領用量, 故給 0.

又. 我的印像中, 欄位名稱應該不可以有 ( 號
設計欄位 和 印表時列印欄位標題 是兩個獨立事件, 也就是 資料庫裏的欄位名稱是 QTY, 印表或顯示時可以是 數量, QTY(KG), BRABRABRA

鄉親啊 參考一下
------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2008-10-22 14:21:59, 註解 無‧
g9614721
一般會員


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-10-22 15:22:13 IP:67.15.xxx.xxx 訂閱
不好意思 幫我看一下= ="
真的是看不懂阿
第一行就發生錯誤..
begin
if edit16.text<>'' then
begin
form1.Query2.Close;
form1.Query2.SQL.Clear;
select * from (Select 日期, 進貨數量(kg), 0 as 領用數量(kg), 0 as 庫存量(kg)
from 購入量 where 物品名稱="' edit16.text '"'
union all
Select 日期, 0 as 進貨數量(kg), 領用數量(kg), 0 as 庫存量(kg)
from 領用量 where 物品名稱="' edit16.text '"' order by 日期)

union all
select ' ', sum(進貨數量(kg)), sum(領用數量(kg)), sum(進貨數量(kg))-sum(領用數量(kg))
from (Select 日期, 進貨數量(kg), 0 as 領用數量(kg), 0 as 庫存量(kg)
from 購入量 where 物品名稱="' edit16.text '"'
union all
Select 日期, 0 as 進貨數量(kg), 領用數量(kg), 0 as 庫存量(kg)
from 領用量 where 物品名稱="' edit16.text '"');
form1.Query2.Open;
end
else
showmessage('請輸入物品名稱');


===================引 用 st33chen 文 章===================
對不起, 我剛剛因為寫好一段後copy 成第二段, 沒改到 領用檔, 現已改好,

依我了解, 如果 A TABLE 有三筆, B TABLE 有四筆
那麼 SELECT .... FROM A, B 會有十二筆 ( 排列組合 3*4 )

SELECT ... FROM A
UNION ALL
SELECT ... FROM B
則會得到 7 (3 4) 筆
各有適用的地方, 我覺得您的問題比較像用 UNION ALL

在用 UNION ALL 時, 各個 SELECT 的欄位數要相等, 各欄位的屬性要相同,
所以會在 SELECT 進貨檔時 加一個 領用量的欄位, 因進貨檔無領用量, 故給 0.

又. 我的印像中, 欄位名稱應該不可以有 ( 號
設計欄位 和 印表時列印欄位標題 是兩個獨立事件, 也就是 資料庫裏的欄位名稱是 QTY, 印表或顯示時可以是 數量, QTY(KG), BRABRABRA

鄉親啊 參考一下
st33chen
尊榮會員


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-10-22 17:08:46 IP:122.116.xxx.xxx 未訂閱
請問您用什麼資料庫?

欄位名稱不要用 ( 或 ) 試看看
=================================
sql 整個是一個字串, 例如 :
begin
if edit16.text<>'' then begin
form1.Query2.Close;
form1.Query2.SQL.Clear;''
form1.query2.sql.text :=
'select * from ('
' Select 日期, 進貨數量(kg), 0 as 領用數量(kg), 0 as 庫存量(kg)'
' from 購入量 where 物品名稱="' edit16.text '"'
' union all '
' Select 日期, 0 as 進貨數量(kg), 領用數量(kg), 0 as 庫存量(kg)'
' from 領用量 where 物品名稱="' edit16.text '"'
' order by 日期'
')'
' union all '
'select '' '', sum(進貨數量(kg)), sum(領用數量(kg)), sum(進貨數量(kg))-sum(領用數量(kg))'
' from (Select 日期, 進貨數量(kg), 0 as 領用數量(kg), 0 as 庫存量(kg)'
' from 購入量 where 物品名稱="' edit16.text '"'
' union all '
'Select 日期, 0 as 進貨數量(kg), 領用數量(kg), 0 as 庫存量(kg)'
' from 領用量 where 物品名稱="' edit16.text '"';
form1.Query2.Open;
end
else
showmessage('請輸入物品名稱');
還是要提醒您, 欄位名稱不要有 ( 或 )

------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2008-10-22 21:01:08, 註解 無‧
g9614721
一般會員


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-10-27 02:58:56 IP:140.125.xxx.xxx 訂閱

===================引 用 st33chen 文 章===================
請問您用什麼資料庫?

data base

欄位名稱不要用 ( 或 ) 試看看
=================================
sql 整個是一個字串, 例如 :
begin
if edit16.text<>'' then begin
form1.Query2.Close;
form1.Query2.SQL.Clear;''
form1.query2.sql.text := ←(有錯誤發生= =)
'select * from ('
' Select 日期, 進貨數量(kg), 0 as 領用數量(kg), 0 as 庫存量(kg)'
' from 購入量 where 物品名稱="' edit16.text '"'
(↑每行前面這些 ( ' )都是要加入的嗎? )
' union all '
' Select 日期, 0 as 進貨數量(kg), 領用數量(kg), 0 as 庫存量(kg)'
' from 領用量 where 物品名稱="' edit16.text '"'
' order by 日期'
')'
' union all '
'select '' '', sum(進貨數量(kg)), sum(領用數量(kg)), sum(進貨數量(kg))-sum(領用數量(kg))'
' from (Select 日期, 進貨數量(kg), 0 as 領用數量(kg), 0 as 庫存量(kg)'
' from 購入量 where 物品名稱="' edit16.text '"'
' union all '
'Select 日期, 0 as 進貨數量(kg), 領用數量(kg), 0 as 庫存量(kg)'
' from 領用量 where 物品名稱="' edit16.text '"';
form1.Query2.Open;
end
else
showmessage('請輸入物品名稱');

-------------------------------------------------------------------------------------
另外
我的進貨表欄位:日期 msds 物品名稱 進貨數量 庫存量 貯存地點
我的領用表欄位:日期 msds 物品名稱 領用數量 庫存量 使用地點 使用人員
這樣上面需要修改嗎?

編輯記錄
g9614721 重新編輯於 2008-10-27 04:18:06, 註解 無‧
st33chen
尊榮會員


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-10-27 08:28:45 IP:122.116.xxx.xxx 未訂閱
1. form1.query2.sql.text := ←(有錯誤發生= =)
請問錯誤訊息是什麼?

2. (↑每行前面這些 ( ' )都是要加入的嗎? )
是的, 對 delphi 來說, 一個字串(string) 是前後用單引號包起來
若字串中有單引號, 用兩個單引號代替
許多字串再串在一起用
而 form1.query2.sql.text 的型態是 字串, 所以才會那麼寫.


參考一下.

您用什麼資料庫 ? dbase? foxpro? access? mssql? oracle? mysql?
知道這個是想確認欄位名稱可否有 ( 或 )
我自己可以留下經驗



===================引 用 g9614721 文 章===================

===================引 用 st33chen 文 章===================
請問您用什麼資料庫?

data base

欄位名稱不要用 ( 或 ) 試看看
=================================
sql 整個是一個字串, 例如 :
begin
if edit16.text<>'' then begin
form1.Query2.Close;
form1.Query2.SQL.Clear;''
form1.query2.sql.text := ←(有錯誤發生= =)
'select * from ('
' Select 日期, 進貨數量(kg), 0 as 領用數量(kg), 0 as 庫存量(kg)'
' from 購入量 where 物品名稱="' edit16.text '"'
(↑每行前面這些 ( ' )都是要加入的嗎? )
' union all '
' Select 日期, 0 as 進貨數量(kg), 領用數量(kg), 0 as 庫存量(kg)'
' from 領用量 where 物品名稱="' edit16.text '"'
' order by 日期'
')'
' union all '
'select '' '', sum(進貨數量(kg)), sum(領用數量(kg)), sum(進貨數量(kg))-sum(領用數量(kg))'
' from (Select 日期, 進貨數量(kg), 0 as 領用數量(kg), 0 as 庫存量(kg)'
' from 購入量 where 物品名稱="' edit16.text '"'
' union all '
'Select 日期, 0 as 進貨數量(kg), 領用數量(kg), 0 as 庫存量(kg)'
' from 領用量 where 物品名稱="' edit16.text '"';
form1.Query2.Open;
end
else
showmessage('請輸入物品名稱');

-------------------------------------------------------------------------------------
另外
我的進貨表欄位:日期 msds 物品名稱 進貨數量 庫存量 貯存地點
我的領用表欄位:日期 msds 物品名稱 領用數量 庫存量 使用地點 使用人員
這樣上面需要修改嗎?

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


發表:15
回覆:75
積分:83
註冊:2007-11-22

發送簡訊給我
#9 引用回覆 回覆 發表時間:2008-10-27 12:14:24 IP:122.117.xxx.xxx 訂閱
st33chen大大真有耐心...@@
請問您用什麼資料庫?
data base
看到這回答真是想暈倒...@@

路過...只是「資料庫-->翻譯過來不是「Database」嗎...」...

Select 日期, 進貨數量(kg), 0 as 領用數量(kg), 0 as 庫存量(kg)
實在看不出來是那個Database有這類似的下法,進貨數量這是Store procedure嗎?

暈倒的路人...@@

===================引 用 st33chen 文 章===================
1. form1.query2.sql.text := ←(有錯誤發生= =)
請問錯誤訊息是什麼?

2. (↑每行前面這些 ( ' )都是要加入的嗎? )
是的, 對 delphi 來說, 一個字串(string) 是前後用單引號包起來
若字串中有單引號, 用兩個單引號代替
許多字串再串在一起用
而 form1.query2.sql.text 的型態是 字串, 所以才會那麼寫.


參考一下.

您用什麼資料庫 ? dbase? foxpro? access? mssql? oracle? mysql?
知道這個是想確認欄位名稱可否有 ( 或 )
我自己可以留下經驗



===================引 用 g9614721 文 章===================

===================引 用 st33chen 文 章===================
請問您用什麼資料庫?

data base

欄位名稱不要用 ( 或 ) 試看看
=================================
sql 整個是一個字串, 例如 :
begin
if edit16.text<>'' then begin
form1.Query2.Close;
form1.Query2.SQL.Clear;''
form1.query2.sql.text := ←(有錯誤發生= =)
'select * from ('
' Select 日期, 進貨數量(kg), 0 as 領用數量(kg), 0 as 庫存量(kg)'
' from 購入量 where 物品名稱="' edit16.text '"'
(↑每行前面這些 ( ' )都是要加入的嗎? )
' union all '
' Select 日期, 0 as 進貨數量(kg), 領用數量(kg), 0 as 庫存量(kg)'
' from 領用量 where 物品名稱="' edit16.text '"'
' order by 日期'
')'
' union all '
'select '' '', sum(進貨數量(kg)), sum(領用數量(kg)), sum(進貨數量(kg))-sum(領用數量(kg))'
' from (Select 日期, 進貨數量(kg), 0 as 領用數量(kg), 0 as 庫存量(kg)'
' from 購入量 where 物品名稱="' edit16.text '"'
' union all '
'Select 日期, 0 as 進貨數量(kg), 領用數量(kg), 0 as 庫存量(kg)'
' from 領用量 where 物品名稱="' edit16.text '"';
form1.Query2.Open;
end
else
showmessage('請輸入物品名稱');

-------------------------------------------------------------------------------------
另外
我的進貨表欄位:日期 msds 物品名稱 進貨數量 庫存量 貯存地點
我的領用表欄位:日期 msds 物品名稱 領用數量 庫存量 使用地點 使用人員
這樣上面需要修改嗎?

------
初學、初學、學了很久...還是在初學階段..Orz
編輯記錄
cobraliu 重新編輯於 2008-10-27 12:15:02, 註解 無‧
careychen
尊榮會員


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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2008-10-27 14:04:07 IP:60.248.xxx.xxx 訂閱
真的,看到 st33chen 這樣的耐心解答,小弟好生佩服,下面提供一個 SQL ,可以一次 SQL 語法將您的資料
帶回來,您先至 SQL 中測試, ok 後再帶回 Query 中即可!!

select a.物品名稱, sum(a.進貨量) [進貨數量(kg],
sum(b.領用量) [領用數量(kg)], sum(a.進貨量-b.領用量) as 庫存量
from
(Select 物品名稱, Sum(進貨量) as 進貨量
from Table1
group by 物品名稱
) a left join
(Select 物品名稱, Sum(領用量) as 領用量
from Table2
group by 物品名稱
) b
on a.物品名稱=b.物品名稱
group by a.物品名稱 with rollup

Sample 結果

物品名稱進貨數量(KG)領用數量(kg庫存量
aa34430
bb15521134
cc312
NULL19226166

最後一行 Null 就是總計的結果
希望對您有用!!
------
價值的展現,來自於你用哪一個角度來看待它!!
st33chen
尊榮會員


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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2008-10-27 16:42:51 IP:122.116.xxx.xxx 未訂閱
carey 大大的做法正確, 我也有用過,
那是基於 有進貨方有領用 的假設
所以用進貨檔為主体 連進來 領用檔
一般是沒問題,

但是有時會有 無進貨有領用的情況(可能不適用本問題)
(例如挑一段日期區間做查詢, 而不是從頭查到尾的情形)
所以, 碰到這類問題, 如果沒有把握有一個完整的主檔, 我都用 union all 來做
參考一下啦

另外, 想請教 carey 大大 with rollup 適用在那些 db engine?

感恩

剛剛試了一下, oracle 不行, 說不定要裝 olap 才可以

anyway, 來這真好, 三不五時就有新招可學.
鄉親啊, 來哦.

------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2008-10-27 16:48:38, 註解 無‧
st33chen 重新編輯於 2008-10-27 16:54:43, 註解 無‧
st33chen 重新編輯於 2008-10-27 16:57:32, 註解 無‧
st33chen 重新編輯於 2008-10-27 16:58:25, 註解 無‧
careychen
尊榮會員


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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2008-10-27 17:10:17 IP:60.248.xxx.xxx 訂閱
carey 大大的做法正確, 我也有用過,
那是基於 有進貨方有領用 的假設
所以用進貨檔為主体 連進來 領用檔
一般是沒問題,

但是有時會有 無進貨有領用的情況(可能不適用本問題)
(例如挑一段日期區間做查詢, 而不是從頭查到尾的情形)
所以, 碰到這類問題, 如果沒有把握有一個完整的主檔, 我都用 union all 來做
參考一下啦

沒錯~~, st33chen 大大您說的沒錯,小弟這邊沒有使用較周全的方式處理~~~謝謝您的指教

另外, 想請教 carey 大大 with rollup 適用在那些 db engine?

with rollup 在 MSSQL 和 MYSQL 上都有
而 Oracle 要使用 group by rollup(Column1, Column2, Column3) 的方式
其他的資料庫小弟就不熟了,不好意思

感恩

剛剛試了一下, oracle 不行, 說不定要裝 olap 才可以

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


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

發送簡訊給我
#13 引用回覆 回覆 發表時間:2008-10-29 03:23:21 IP:140.125.xxx.xxx 訂閱
感謝各位大大指教阿!
在下問的問題很淺= =
不過真的搞不定阿><
謝謝各位大大幫忙了...
謝謝st33chen大大的耐心回答


===================引 用 careychen 文 章===================
真的,看到 st33chen 這樣的耐心解答,小弟好生佩服,下面提供一個 SQL ,可以一次 SQL 語法將您的資料
帶回來,您先至 SQL 中測試, ok 後再帶回 Query 中即可!!


(我聽大大的建議 將欄位中的(kg)去掉了 所以不用 (kg)了

這是我的詳細欄位名稱
我使用的是DELPHI 7 程式 的BDE資料庫

TQUERY1 (購入表 :日期 msds 物品名稱 進貨數量 庫存量 貯存地點)
TQUERY2 (領用表 :日期 msds 物品名稱 領用數量 庫存量 使用地點 使用人員)


(請問 a.物品名稱 b.領用量 ab是啥咪意思?)

(下面該如何修改= =")
select a.物品名稱, sum(a.進貨量) [進貨數量],
sum(b.領用量) [領用數量], sum(a.進貨量-b.領用量) as 庫存量
from
(Select 物品名稱, Sum(進貨量) as 進貨量
from 進貨表
group by 物品名稱
) a left join
(Select 物品名稱, Sum(領用量) as 領用量
from 購入表
group by 物品名稱
) b
on a.物品名稱=b.物品名稱
group by a.物品名稱 with rollup

Sample 結果

物品名稱進貨數量(KG)領用數量(kg庫存量
aa34430
bb15521134
cc312
NULL19226166

最後一行 Null 就是總計的結果
希望對您有用!!
careychen
尊榮會員


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

發送簡訊給我
#14 引用回覆 回覆 發表時間:2008-10-29 09:25:22 IP:60.248.xxx.xxx 訂閱
那您的問題在搞不定的地方是哪呢? 能不能再列清楚一點您的問題
例如:
有出錯的 sql 語法?
執行錯誤的訊息?
編譯錯誤?
還是其他??

另外建議您,顏色不用太豐富,不然搞不大清楚是您的回文,還是本文

===================引 用 g9614721 文 章===================
感謝各位大大指教阿!
在下問的問題很淺= =
不過真的搞不定阿><
謝謝各位大大幫忙了...
謝謝st33chen大大的耐心回答

===================引 用 careychen 文 章===================
真的,看到 st33chen 這樣的耐心解答,小弟好生佩服,下面提供一個 SQL ,可以一次 SQL 語法將您的資料
帶回來,您先至 SQL 中測試, ok 後再帶回 Query 中即可!!


(我聽大大的建議 將欄位中的(kg)去掉了 所以不用 (kg)了

這是我的詳細欄位名稱
我使用的是DELPHI 7 程式 的BDE資料庫
TQUERY1 (購入表 :日期 msds 物品名稱 進貨數量 庫存量 貯存地點)
TQUERY2 (領用表 :日期 msds 物品名稱 領用數量 庫存量 使用地點 使用人員)

(請問 a.物品名稱 b.領用量 ab是啥咪意思?)

在下面的語法中

用 ( Select ..... ) a ==> 表示這是一個臨時表,這個臨時表我們暫定一個名稱叫 a ,而 b 也是一樣意思
所以 a.物品名稱 b.領用量 ==> 表示 【臨時表 a】 中的 【物品名稱】欄位,b 也是同理


(下面該如何修改= =")
有上面的解釋,您可以試試下面的語法自己改看看

select a.物品名稱, sum(a.進貨量) [進貨數量],
sum(b.領用量) [領用數量], sum(a.進貨量-b.領用量) as 庫存量
from
(Select 物品名稱, Sum(進貨量) as 進貨量
from 進貨表
group by 物品名稱
) a left join
(Select 物品名稱, Sum(領用量) as 領用量
from 購入表
group by 物品名稱
) b
on a.物品名稱=b.物品名稱
group by a.物品名稱 with rollup

Sample 結果

物品名稱進貨數量(KG)領用數量(kg庫存量
aa34430
bb15521134
cc312
NULL19226166

最後一行 Null 就是總計的結果
希望對您有用!!
------
價值的展現,來自於你用哪一個角度來看待它!!
g9614721
一般會員


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

發送簡訊給我
#15 引用回覆 回覆 發表時間:2008-10-29 15:23:48 IP:140.125.xxx.xxx 訂閱
我有試著修改過呀!↓
但是第一行就說 = =
但是修改前 跟修改後 都一樣
好像找不到進貨數量
lnvalid use of keyword
token [進貨數量];
line number :1

select a.物品名稱, sum(a.購入表) [進貨數量],
sum(b.領用表) [領用數量], sum(a.購入表-b.領用表) as 庫存量

(Select 物品名稱, Sum(進貨量) as 進貨量
from 進貨表
group by 物品名稱
) a left join
(Select 物品名稱, Sum(領用量) as 領用量
from 購入表
group by 物品名稱
) b
on a.物品名稱=b.物品名稱
group by a.物品名稱 with rollup




===================引 用 careychen 文 章===================
那您的問題在搞不定的地方是哪呢? 能不能再列清楚一點您的問題
例如:
有出錯的 sql 語法?
執行錯誤的訊息?
編譯錯誤?
還是其他??

另外建議您,顏色不用太豐富,不然搞不大清楚是您的回文,還是本文

===================引 用 g9614721 文 章===================
感謝各位大大指教阿!
在下問的問題很淺= =
不過真的搞不定阿><
謝謝各位大大幫忙了...
謝謝st33chen大大的耐心回答

===================引 用 careychen 文 章===================
真的,看到 st33chen 這樣的耐心解答,小弟好生佩服,下面提供一個 SQL ,可以一次 SQL 語法將您的資料
帶回來,您先至 SQL 中測試, ok 後再帶回 Query 中即可!!


(我聽大大的建議 將欄位中的(kg)去掉了 所以不用 (kg)了

這是我的詳細欄位名稱
我使用的是DELPHI 7 程式 的BDE資料庫
TQUERY1 (購入表 :日期 msds 物品名稱 進貨數量 庫存量 貯存地點)
TQUERY2 (領用表 :日期 msds 物品名稱 領用數量 庫存量 使用地點 使用人員)

(請問 a.物品名稱 b.領用量 ab是啥咪意思?)

在下面的語法中

用 ( Select ..... ) a ==> 表示這是一個臨時表,這個臨時表我們暫定一個名稱叫 a ,而 b 也是一樣意思
所以 a.物品名稱 b.領用量 ==> 表示 【臨時表 a】 中的 【物品名稱】欄位,b 也是同理


(下面該如何修改= =")
有上面的解釋,您可以試試下面的語法自己改看看

select a.物品名稱, sum(a.進貨量) [進貨數量],
sum(b.領用量) [領用數量], sum(a.進貨量-b.領用量) as 庫存量
from
(Select 物品名稱, Sum(進貨量) as 進貨量
from 進貨表
group by 物品名稱
) a left join
(Select 物品名稱, Sum(領用量) as 領用量
from 購入表
group by 物品名稱
) b
on a.物品名稱=b.物品名稱
group by a.物品名稱 with rollup

Sample 結果

物品名稱進貨數量(KG)領用數量(kg庫存量
aa34430
bb15521134
cc312
NULL19226166

最後一行 Null 就是總計的結果
希望對您有用!!
careychen
尊榮會員


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

發送簡訊給我
#16 引用回覆 回覆 發表時間:2008-10-29 16:20:19 IP:60.248.xxx.xxx 訂閱
嗯~~~好問題~~~,結果都誤會您的原意了

要裝到 Query 裡面去的話
請把
form1.Query2.SQL.Add('Select * from 領用量 where 物品名稱="' edit16.text '"');

改成
※注意,您原本的貼文是 SUN ==> 不是 SUM

form1.Query2.SQL.Add('SELECT SUM(A.A) AS AIN, ' // A總進貨量
'SUM(A.B) AS BIN, ' // B總進貨量
'SUM(A.C) AS CIN, ' //C總進貨量
'SUM(B.A), AS AOUT ' // A總出貨量
'SUM(B.B), AS BOUT ' // B總出貨量
'SUM(B.C), /AS COUT ' // C總出貨量
'SUM(A.A)-SUN(B.A) AS A, ' // A庫存
'SUM(A.B)-SUN(B.B) AS B, ' // B庫存
'SUM(A.C)-SUN(B.C) AS C ' // C庫存
FROM 進貨量 as A, 領用量 as B WHERE A.PKEY=B.PKEY and A.物品名稱="' edit16.text '"');




===================引 用 g9614721 文 章===================
我的table1 是進貨量
我的table2 是領用量
我想要經由edit 讓使用者輸入物品名稱後
可以查出該物品的進出貨 明細
依照日期排序
然後SUM該物品的"進貨量(KG)" - SUM該物品的"領用量(KG)" =顯示在"庫存量(KG)"
(能達到顯示在同一張gird嗎?)

我不知道怎麼把下面這段↓
SELECT SUN(A.A) AS AIN, // A總進貨量
SUN(A.B) AS BIN, // B總進貨量
SUN(A.C) AS CIN, //C總進貨量
SUN(B.A), AS AOUT // A總出貨量
SUN(B.B), AS BOUT // B總出貨量
SUN(B.C), /AS COUT // C總出貨量
SUN(A.A)-SUN(B.A) AS A, // A庫存
SUN(A.B)-SUN(B.B) AS B, // B庫存
SUN(A.C)-SUN(B.C) AS C // C庫存
FROM A,B WHERE A.PKEY=B.PKEY


裝到下面這段去= ="

procedure TForm1.Button29Click(Sender: TObject);
begin
if edit16.text<>'' then
begin
form1.Query2.Close;
form1.Query2.SQL.Clear;
form1.Query2.SQL.Add('Select * from 領用量 where 物品名稱="' edit16.text '"');
form1.Query2.Open;
end
else
showmessage('請輸入物品名稱');

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


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

發送簡訊給我
#17 引用回覆 回覆 發表時間:2008-10-29 17:18:33 IP:140.125.xxx.xxx 訂閱
我有試著修改過呀!↓
但是第一行就說 = =
但是修改前 跟修改後 都一樣
好像找不到進貨數量
lnvalid use of keyword
token [進貨數量];
line number :1

select a.物品名稱, sum(a.購入表) [進貨數量],
sum(b.領用表) [領用數量], sum(a.購入表-b.領用表) as 庫存量

(Select 物品名稱, Sum(進貨量) as 進貨量
from 進貨表
group by 物品名稱
) a left join
(Select 物品名稱, Sum(領用量) as 領用量
from 購入表
group by 物品名稱
) b
on a.物品名稱=b.物品名稱
group by a.物品名稱 with rollup




===================引 用 careychen 文 章===================
那您的問題在搞不定的地方是哪呢? 能不能再列清楚一點您的問題
例如:
有出錯的 sql 語法?
執行錯誤的訊息?
編譯錯誤?
還是其他??

另外建議您,顏色不用太豐富,不然搞不大清楚是您的回文,還是本文

===================引 用 g9614721 文 章===================
感謝各位大大指教阿!
在下問的問題很淺= =
不過真的搞不定阿><
謝謝各位大大幫忙了...
謝謝st33chen大大的耐心回答

===================引 用 careychen 文 章===================
真的,看到 st33chen 這樣的耐心解答,小弟好生佩服,下面提供一個 SQL ,可以一次 SQL 語法將您的資料
帶回來,您先至 SQL 中測試, ok 後再帶回 Query 中即可!!


(我聽大大的建議 將欄位中的(kg)去掉了 所以不用 (kg)了

這是我的詳細欄位名稱
我使用的是DELPHI 7 程式 的BDE資料庫
TQUERY1 (購入表 :日期 msds 物品名稱 進貨數量 庫存量 貯存地點)
TQUERY2 (領用表 :日期 msds 物品名稱 領用數量 庫存量 使用地點 使用人員)

(請問 a.物品名稱 b.領用量 ab是啥咪意思?)

在下面的語法中

用 ( Select ..... ) a ==> 表示這是一個臨時表,這個臨時表我們暫定一個名稱叫 a ,而 b 也是一樣意思
所以 a.物品名稱 b.領用量 ==> 表示 【臨時表 a】 中的 【物品名稱】欄位,b 也是同理


(下面該如何修改= =")
有上面的解釋,您可以試試下面的語法自己改看看

select a.物品名稱, sum(a.進貨量) [進貨數量],
sum(b.領用量) [領用數量], sum(a.進貨量-b.領用量) as 庫存量
from
(Select 物品名稱, Sum(進貨量) as 進貨量
from 進貨表
group by 物品名稱
) a left join
(Select 物品名稱, Sum(領用量) as 領用量
from 購入表
group by 物品名稱
) b
on a.物品名稱=b.物品名稱
group by a.物品名稱 with rollup

Sample 結果

物品名稱進貨數量(KG)領用數量(kg庫存量
aa34430
bb15521134
cc312
NULL19226166

最後一行 Null 就是總計的結果
希望對您有用!!
系統時間:2024-05-08 10:23:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!