2017-07-17 54 views
-2

我有一個名爲Trades的表中加載了數據。現在我需要查詢這張表,找到滿足特定條件併產生交易價值的元素。 這裏是要求SQL - 通過列表循環並使用sql select語句添加到變量

TradeAmt = 0 
Loop for all Trades 
{IF TradeId is 35 
    If type = 'I' 
    ADD (TradeAmt =TradeAmt + col_TradeAmt) 
else 
    ADD (TradeAmt = TradeAmt + col_TradeAmtOverlap) 
END-IF} 
Return TradeAmt 

數據: ROW1:tradeid = 35,類型= I,col_TradeAmt = 10,col_TradeAmtOverlap = 20

行2:tradeid = 35,類型= S,col_TradeAmt = 30, col_TradeAmtOverlap = 40

輸出:TradeAmt = 50

我怎麼可以這樣使用SQL語句寫。

+2

哪個sql數據庫?如果您發佈樣本數據和預期輸出,這也很有幫助。您的解決方案可能與我們可以從OP – maSTAShuFu

+0

瞭解的不同可以有多個id = 35的交易嗎? –

+1

你究竟想要做什麼?目前還不清楚你想要什麼。這是「如何提問」的好指南。 https://stackoverflow.com/help/how-to-ask – Eric

回答

1

那麼,在SQL中,你並不真正遍歷序列。 您編寫了一份聲明,說明您想從數據集中獲得什麼(例如交易表)。

在你的情況下,你想以某種方式積累所有的元素,並提供積累作爲結果,你可以通過使用像SUM這樣的聚合函數來做到這一點。

沿着這些線可能會工作。請注意,我在這裏嵌套了兩個查詢,內部決定將哪個列視爲要累積的「金額」,具體取決於交易的類型,並且僅過濾Id 35的交易,外部查詢執行總金額總計:

SELECT SUM("Amount") FROM 
(SELECT 
CASE 
    WHEN Type = 'I' THEN col_TradeAmt 
    ELSE col_TradeAmtOverlap 
END "Amount" 
FROM Trades 
WHERE TradeId = 35) "TradeAmt"; 
+0

謝謝!這工作! – codeJam

+1

或更簡單'SELECT SUM(CASE WHEN Type ='I'THEN col_TradeAmt ELSE col_TradeAmtOverlap END)FROM Trades WHERE TradeId = 35' – philipxy