2013-01-08 34 views
1

一樣好,這是我的問題:你如何從一列加起來的數據,如果該ID是在SQL

我需要計算列的增加(稱之爲SHIPPED_QUANTITY)如果PO_NUMBER是一樣的,這時我需要這個計算是在一個WHERE語句,使得組合的數字將顯示SHIPPED_QUANTITY < PO_QUANTITY

例如

PO #    PO_QUANTITY   SHIPPED QUANTITY 

123A    500     200 
123A    500     300 
123B    400     200 
124A    500     500 
125A    1000     500 
125A    1000     500 

即使PO#123B類似,它不能被列入計算,在這種情況下使用上面的數據,我想123A,124A,125A不顯示(因爲SHIPPED QUANTITY會= PO_QUANTITY)但我想123B顯示...所以我需要添加SHIPPED_QUANTITY PO#是相同的,但只有那些獨特的(所以我不能添加123A,123A,125A,125A ,,等於1500,我需要123A加123A,125A加125A分別得500和1000)

希望問題是不夠具體,

哦,都必須在SQL中進行,而不是MySQL或的Oracle SQL

回答

1

假設爲同一PO #所有行具有相同的價值PO_QUANTITY(*):

SELECT 
    "PO #", 
    MIN(PO_QUANTITY), 
    SUM("SHIPPED QUANTITY") 
FROM 
    UnnamedTable 
GROUP BY 
    "PO #" 
HAVING 
    MIN(PO_QUANTITY) > SUM("SHIPPED QUANTITY") 

(*)你應該有對於PO一個表,只有PO #PO_QUANTITY和一個單獨的表爲SHIPPPED QUANTITY,讓你只存儲PO_QUANTITY一次爲每個訂單。


要撰寫成一個大的查詢此,我希望包括上述查詢作爲子查詢或者(如果你的數據庫支持他們)的公共表表達式。因爲這避免了包括在GROUP BY或作爲SELECT子句中聚集等欄目

SELECT 
    * //TODO - Select columns 
FROM 
    (
    SELECT 
     "PO #", 
     MIN(PO_QUANTITY), 
     SUM("SHIPPED QUANTITY") 
    FROM 
     UnnamedTable 
    GROUP BY 
     "PO #" 
    HAVING 
     MIN(PO_QUANTITY) > SUM("SHIPPED QUANTITY") 
    ) as t(PO,OrderedQuantity,TotalShipped) 
//TODO - Rest of query 

子查詢的形式,它會看起來像。

+0

哦,我忘了告訴你..所有的工作都必須作爲查詢來完成,而且都是通過視圖,我不允許改變表或視圖 – socool111

+0

@ user1955517 - 這是一個查詢。在標準的SQL中,按照你的要求。 –

+0

是的,對不起,它寫得很差......我只提到了關於不編輯表格或視圖的部分,因爲這是我不允許做的。 但是你的代碼做了詭計,它絕對有效......我可以在更大的查詢中使用這個正確的?所以,如果我想獲得更多的列......會在更大的查詢中的WHERE語句之後落下,還是它是select的一部分? – socool111

相關問題