2013-02-13 49 views
1

我正在嘗試獲取SQL表中給定安全性的總數量。如果交易類型爲負數( - ),我想計算每一行並將它們總和起來,如果它們是肯定的交易類型(+)[txn type]或從其餘結果中刪除總計。我目前可以用下面的代碼根據列(事務類型)SQL總結或減去

SELECT  [STOCK REC NO], 
SUM(ISNULL([QTY DELIVERED], 0) + ISNULL([QTY DUE IN], 0) - ISNULL([QTY DUE OUT], 0)) AS [TOTAL QUANTITY] 
FROM   bla_bla 
WHERE  ([EVENT DATE] < '09/26/2012') 
GROUP BY [STOCK REC NO] 

TXN TYPE QTY DELIVERED QTY DUE IN QTY DUE OUT EVENT DATE 
+    1          28/11/2005 
+    2          07/02/2006 
-    3          22/11/2006 
+    20          18/04/2011 
+    40          19/04/2011 
+0

我不太理解你的問題。我看到示例數據。你還可以向我們展示SELECT語句顯示的結果嗎?他們似乎沒有關係。例如,您的底部數據集沒有「STOCK REC NO」列,因此我認爲它來自不同的表格?您是否希望獲得一個FINAL結果,或者您仍然試圖按照「STOCK REC NO」分組? – 2013-02-13 16:51:26

回答

1

返回總和所有行如果我明白你的問題正確地做這種方式

SELECT  [STOCK REC NO], 
SUM(ISNULL(CASE WHEN [TXN TYPE] = '-' THEN -1 ELSE 1 END * [QTY DELIVERED], 0) + 
    ISNULL(CASE WHEN [TXN TYPE] = '-' THEN -1 ELSE 1 END * [QTY DUE IN], 0) - 
    ISNULL(CASE WHEN [TXN TYPE] = '-' THEN -1 ELSE 1 END * [QTY DUE OUT], 0)) 
AS [TOTAL QUANTITY] 
FROM   bla_bla 
WHERE  ([EVENT DATE] < '09/26/2012') 
GROUP BY [STOCK REC NO] 
0
SELECT [STOCK REC NO], 
     CASE TXN_TYPE 
      WHEN '+' THEN SUM(ISNULL([QTY DELIVERED], 0) + ISNULL([QTY DUE IN], 0) + ISNULL([QTY DUE OUT], 0)) 
      ELSE SUM(ISNULL([QTY DELIVERED], 0) + ISNULL([QTY DUE IN], 0) - ISNULL([QTY DUE OUT], 0)) 
     END AS [TOTAL QUANTITY] 
FROM bla_bla 
WHERE ([EVENT DATE] < '09/26/2012') 
GROUP BY 
     [STOCK REC NO] 
+0

這是一個很好的答案,我認爲這與案例功能有關。這完全不起作用。我必須將TXN_Type放在group by語句中,只給出負值和正值。我需要從站立總數中減去.. – steven 2013-02-13 17:13:37

0

如果TXN_TYPE總是要麼+- ,你可以試試這個小竅門:

SELECT  [STOCK REC NO], 
      SUM(
      (TXN_TYPE + '1') * ( 
      ISNULL([QTY DELIVERED], 0) + ISNULL([QTY DUE IN], 0) - ISNULL([QTY DUE OUT], 0) 
      ) 
      ) AS [TOTAL QUANTITY] 
FROM   bla_bla 
WHERE  ([EVENT DATE] < '09/26/2012') 
GROUP BY [STOCK REC NO] 

TXN_TYPE + '1'變成'+1''-1'。雖然它是一個字符串,但由於乘法的原因它會隱式轉換爲數字。