2011-09-01 14 views
1

的結果,在過程中的計算我已經叫表TblOrders.the字段FldSlNoFldStrategyIDFldTradeServerNameFldBaseDirFldBinaryStartTimeFldInstrumentIDFldOrderNumberFldBuySellFldDisplayQuantityFldRemainingQuantityFldTotalTradeQuantityFldLastTradePriceFldLastTradeQuantityFldPriceFldOrderTime,FldReferenceTextFldOrderStatusID。現在我有一個叫做ProfitCalculation的程序。如何通過兩個查詢

的過程如下:

delimiter // 
CREATE PROCEDURE ProfitCalculation 
    (
     IN instrument      INT(20)  , 
     OUT profit       float(10,2) 
    ) 
BEGIN 

DECLARE buy DECIMAL(10,2); 
DECLARE sell DECIMAL(10,2); 
DECLARE oprofit DECIMAL(8,2); 

    SELECT SUM(FldLastTradeQuantity*FldPrice)        
    FROM TblOrders 
    WHERE FldInstrumentID = instrument AND FldBuySell = 'b' AND FldLastTradePrice != 0 AND FldLastTradeQuantity != 0 group by FldInstrumentID INTO buy; 

    SELECT SUM(FldLastTradeQuantity*FldPrice)      
    FROM TblOrders 
    WHERE FldInstrumentID = instrument AND FldBuySell = 's' AND FldLastTradePrice != 0 AND FldLastTradeQuantity != 0 group by FldInstrumentID INTO sell; 

    SELECT (sell-buy) INTO oprofit; 
    SELECT oprofit INTO profit; 
END 
// 
delimiter ; 

它總是返回null。 有沒有解決這個問題的方法。 請幫助我.. 在此先感謝

+1

作爲一個方面的評論,你不需要表('tbl')和字段('fld')前綴,它會阻礙可讀性。 – Triztian

回答

0

首先,在這兩個查詢中,您指定一個GROUP BY,但期望得到一個結果。由於您已經在where子句中包含分組字段,因此這不是必需的。

其次,嘗試運行單個語句(沒有'INTO'語句) - 我的猜測是至少有一個返回NULL,導致輸出爲空。如果您希望零NULL與空記錄的輸出,包裹SUM()聲明COALESCE,如:

SELECT COALESCE(SUM(FldLastTradeQuantity*FldPrice), 0) 

這樣一來,如果兩個語句之一返回NULL,另一個仍然可以工作。

指定條件FldLastTradePrice != 0 AND FldLastTradeQuantity != 0是不必要的,因爲它們將在SUM語句內處理。

+0

FldLastTradePrice!= 0 AND FldLastTradeQuantity!= 0這是必要的,因爲根據這種情況我必須獲取結果.. –

+0

謝謝..最終我得到了結果.. –