線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1657
推到 Plurk!
推到 Facebook!

進銷存開發的問題

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


發表:9
回覆:6
積分:3
註冊:2008-07-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-09-29 19:36:44 IP:125.224.xxx.xxx 訂閱
在開發進銷存系統的時候遭遇到一個問題,要在指定的一段時間區間求出一個資料表,是關係商品的數量統計結果:
【期初數】、【期間進貨數】、【期間銷貨數】、【期末數】
比如說user輸入了:080901-080930,那麼就要得到如下資料
【期初數】:080831結束營業時候該商品剩下多少數量
【期間進貨數】:080901-080930之間進貨的總數量
【期間銷貨數】:080901-080930之間銷貨的總數量
【期末數】:到了080930,該商品還剩多少數量
資料表格有三
二、進貨資料檔
三、銷貨資料檔
要求得這樣的結果,好像單純的select難以達成,小弟在此懇請各位先進們指導了。
編輯記錄
littlecheng 重新編輯於 2008-09-29 19:37:30, 註解 無‧
st33chen
尊榮會員


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-10-03 00:15:17 IP:122.116.xxx.xxx 未訂閱
以個人經驗, 這種情形要用 join  來處理的話常有沒想到的情況發生(例如 proda 無期初值, prodb 無進貨, prodc 無銷貨等等)
所以大都以 union all 來處理, 效率可能不好, 但比較不會漏東漏西, 參考一下 ( 假設沒有期初檔, 期初值由進貨-銷貨算出 ),

select prod_id, sum(bgnqty) 期初, sum(buyqty) 進貨, sum(selqty) 銷貨, sum(bgnqty) sum(buyqty) - sum(selqty) 期末
from (
-- 期初
select prod_id, sum(buyqty - selqty) bgnqty, 0 buyqty, 0 selqty
from (
select prod_id, buyqty, 0 selqty from table_buy where tran_date<'20080901'
union all
select prod_id, 0, selqty from table_sel where tran_date<'20080901'
)
group by prod_id
union all
-- 進貨
select prod_id, 0 bgnqty, buyqty, 0 selqty
from table_buy
where tran_date between '20080901' and '20080930'
union all
-- 銷貨
select prod_id, 0 bgnqty, 0 buyqty, selqty
from table_sel
where tran_date between '20080901' and '20080930'
)
group by prod_id
------------------------------------------------------------
如果有一個完整的基本檔(商品資料檔), 也可以 基本檔 為主, 其餘的 left join 進來
select prod_id, bgnqty 期初, buyqty 進貨, selqty 銷貨, bgnqty buyqty - selqty 期末
from table_prod, (
-- 期初
select prod_id, sum(buyqty - selqty) bgnqty
from (
select prod_id, buyqty, 0 selqty from table_buy where tran_date<'20080901'
union all
select prod_id, 0, selqty from table_sel where tran_date<'20080901'
)
group by prod_id
) table_bgn, (
-- 進貨
select prod_id, sum(buyqty) buyqty
from table_buy
where tran_date between '20080901' and '20080930'
group by prod_id
) table_buy, (
-- 銷貨
select prod_id, sum(selqty) selqty
from table_sel
where tran_date between '20080901' and '20080930'
group by prod_id
) table_sel
where table_prod.prod_id = table_bgn.prod_id( )
and table_prod.prod_id = table_buy.prod_id( )
and table_prod.prod_id = table_sel.prod_id( )


===================引 用 littlecheng 文 章===================
在開發進銷存系統的時候遭遇到一個問題,要在指定的一段時間區間求出一個資料表,是關係商品的數量統計結果:
【期初數】、【期間進貨數】、【期間銷貨數】、【期末數】
比如說user輸入了:080901-080930,那麼就要得到如下資料
【期初數】:080831結束營業時候該商品剩下多少數量
【期間進貨數】:080901-080930之間進貨的總數量
【期間銷貨數】:080901-080930之間銷貨的總數量
【期末數】:到了080930,該商品還剩多少數量
資料表格有三
二、進貨資料檔
三、銷貨資料檔
要求得這樣的結果,好像單純的select難以達成,小弟在此懇請各位先進們指導了。
------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2008-10-03 08:32:26, 註解 無‧
st33chen 重新編輯於 2008-10-03 08:35:54, 註解 無‧
littlecheng
一般會員


發表:9
回覆:6
積分:3
註冊:2008-07-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-10-05 10:03:22 IP:125.224.xxx.xxx 訂閱
謝謝指導,在下受教了。
系統時間:2024-04-20 20:38:49
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!