2016-08-30 37 views
0

我需要從未結訂單獲取銷售數據,並按代碼排序。物料在庫存表中按批號分開(爲了可追溯的原因),但批號不會出現在訂單表中。兩個表格之間的唯一聯繫是零件號。不可靠的查詢結果

當我查詢

選擇代碼,SUM(數量*價格)銷售 從接單INNER JOIN股票ON orders.partno = stock.partno GROUP BY代碼

開始返回奇怪的結果(非常對於給定的代碼超高的銷售數字),我把它改成

選擇DISITNCT orders.partno,stock.lot,stock.code 從接單INNER JOIN股票ON orders.partno = stock.partno

,並注意到,如果幾個批次給定的部分是股票,他們都返回

第一部分LOTA代碼

第一部分LotB代碼

第一部分LOTC代碼

這意味着,如果客戶訂單300部分的Part1,我的查詢返回900,我的銷售數字乘以3.

我該如何解決該問題?

必須注意的是,我不是從一個數據庫開始工作,而是從一組表中構建,其結構有時可能是異想天開的。

+1

不幸的是,採用這種設計時,您無法通過代碼對銷售進行分組。 –

回答

0

在編寫查詢時,您應該真的使用table.column或alias.column引用。如您的問題所述,我們不知道PRICE來自哪個表......零件表或批表。如果您正在處理庫存跟蹤(如FIFO或LIFO方法會計),則必須與正在跟蹤/銷售的庫存的批次表相關聯。

現在,你爲什麼會得到大數目?這是因爲笛卡兒的結果。如果你不熟悉這一點,對於一個表中的每個記錄加入另一個表,它將返回許多匹配。

因此,如果您有一個訂單項的訂單,則產品可用表中只有一個訂單項。所以這是簡單的1:1比例。現在,您的STOCK表可以具有多個記錄,以獲得完全相同的零件號。您現在正在庫存表中爲每個批次輸入返回相同的原始訂單行項目。所以現在,對於你的1件物品,你會得到3件(1:3結果)。

我知道這一點很重要,因爲您需要知道它加入的是哪個「批次」,因此您只需要獲得適當定價的特定記錄即可。

但是,如果您確實有一個您銷售的所有產品的通用產品表,並且該表具有通用的普通價格,無論銷售中使用了哪個「批次」,我都會加入該表中以代替您的報告。但是,您仍然有庫存,商品成本等問題。