1

現在、SQL テーブルで指定された証券の合計数量を取得しようとしています。各行を計算し、トランザクション タイプが正 (+) [txn タイプ] の場合はそれらを合計し、トランザクション タイプが負 (-) の場合は残りの結果からその合計を削除します。現在、次のコードですべての行の合計を返すことができます

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
4

3 に答える 3

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]
于 2013-02-13T16:53:48.673 に答える
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'。文字列ですが、乗算のために暗黙的に数値に変換されます。

于 2013-02-13T17:35:57.063 に答える
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]
于 2013-02-13T16:55:05.877 に答える