2012-08-14 48 views
0

我正在編寫一個查詢,按照產品組來劃分順序值的總和 - 問題是當我添加連接時,聚合SUM得到大大膨脹 - 我假設它是因爲它添加了重複行。林有點新的SQL,但我認爲它是因爲我需要構建具有子選擇或嵌套連接的查詢?當使用連接和組時,sql SUM值不正確

所有數據回報預期,並且我加入拉出需要的數據,但SUM(inv.item_total)AS返回的值要高得多,它應該是 - 低於

SELECT so.Company_id, SUM(inv.item_total) AS Value, co.company_name, 
agents.short_desc, stock_type.short_desc AS Type 


FROM SORDER as so 

JOIN company AS co ON co.company_id = so.company_id 
JOIN invoice AS inv ON inv.Sorder_id = so.Sorder_id 
JOIN sorder_item AS soitem ON soitem.sorder_id = so.Sorder_id 
JOIN STOCK AS stock ON stock.stock_id = soitem.stock_id 
JOIN stock_type AS stock_type ON stock_type.stype_id = stock.stype_id 
JOIN AGENTS AS AGENTS ON agents.agent_id = co.agent_id 

WHERE 
co.last_ordered >'01-JAN-2012' and so.Sotype_id='1' 


GROUP BY so.Company_id,co.company_name,agents.short_desc, stock_type.short_desc 

任何指導做好對SQL我應該如何構造這個查詢來提取一個「未重複的」SUM(inv.item_total)AS Value非常感謝。

+0

我假設一個發票可以有很多訂單項目,而這僅僅是您的重複/通貨膨脹的原因?或者還有其他1:關於你的加入的多種關係? – MatBailie 2012-08-14 18:29:59

+0

我剛剛注意到,在發票和代理之間,你有3張桌子加入進來,但是你從來沒有使用過它們,這是因爲你爲我們簡化了一些東西,還是你可以刪除這三個聯合? – MatBailie 2012-08-14 18:34:27

回答

-1

聽起來像連接不準確。

首先懷疑加入

例如,將代理每company,或每invoice

如果每個訂單,那麼應該加入沿

JOIN AGENTS AS AGENTS ON agents.agent_id = inv.agent_id

第二名嫌疑人的行加入

一個order可以有很多items,並在許多invoices東西同時?這也會導致問題。說一個訂單有3個項目,3個發票已發出。根據您的加入,同樣的項目將出現3次是指共9訂單項,其中應該只有3.您可能需要消除invoices

可能的辦法來解決這個你自己:

我將刪除所有分組和總和,並查看您是否可以通過一張發票過濾,爲所有數據生成一組唯一的行。

開始時只有一個項目的發票並檢查結果集的準確性。如果這樣做,然後添加另一個有多個發票,並檢查行,看看你是否得到你完美的數據集。如果不是,那麼具有重複值(公司名稱,項目名稱,代理名稱等)的列通常是檢查重複項顯示的理由的良好起點。

0

要獲得準確的總和,您只需要所需的連接。所以,這個版本應該可以工作:

SELECT so.Company_id, SUM(inv.item_total) AS Value, co.company_name 
FROM SORDER so JOIN 
    company co 
    ON co.company_id = so.company_id JOIN 
    invoice inv 
    ON inv.Sorder_id = so.Sorder_id 
group by so.Company_id, co.company_name 

然後,您可以一次添加一個連接以查看乘法的發生位置。我猜它與代理有關。

+0

嗨,SUM重複出現時,加入:「加入庫存股份ON stock.stock_id = soitem.stock_id'。但是,問題是需要連接才能獲得股票類型描述!我看不到連接的方式,但不會導致SUM中的重複項? – Marc 2012-08-14 20:29:47

+0

您需要更好地考慮每列在結果表中的含義。庫存總額在公司一級。但是什麼是股票水平?公司只有一種股票嗎?如果不是,你如何劃分發票? – 2012-08-14 20:33:57

+0

每個銷售訂單都有多個銷售訂單項目(描述,項目代碼等)來表示訂單 - 它們存儲在sorder_items表中 - 因此每個sorder_items行都通過sorder_id鏈接回來。但我需要從該表中獲取項目組。不知道它可能拔出沒有充氣SUM - 我的SQL技能還沒有完成! – Marc 2012-08-14 20:39:43