Объединение двух запросов в одну таблицу и вычитание значений - PullRequest
1 голос
/ 31 октября 2019

Мне нужно поместить эти два выходных значения (Add_sum и Minus_sum) в одну таблицу, вычесть их (Add_sum - Minus_sum) и показать это значение.

Я пробовал много других опций, подзапросов и т. Д. но не смог заставить его работать.

Запрос 1:

SELECT        I.ItemCode, COUNT(H.TransactionTypeID) AS ADD_Sum
FROM            inMoveHd AS H INNER JOIN
                         inMoveLn AS L ON L.InvMoveID = H.InvMoveID INNER JOIN
                         inItem AS I ON I.ItemID = L.ItemID INNER JOIN
                         inTransactionType AS T ON H.TransactionTypeID = T.TransactionTypeID
WHERE        (T.TransactionSign = 1)
GROUP BY I.ItemCode

Запрос 2:

SELECT        I.ItemCode, COUNT(H.TransactionTypeID) AS Minus_Sum
FROM            inMoveHd AS H INNER JOIN
                         inMoveLn AS L ON L.InvMoveID = H.InvMoveID INNER JOIN
                         inItem AS I ON I.ItemID = L.ItemID INNER JOIN
                         inTransactionType AS T ON H.TransactionTypeID = T.TransactionTypeID
WHERE        (T.TransactionSign = -1)
GROUP BY I.ItemCode

Ответы [ 2 ]

1 голос
/ 31 октября 2019

Я думаю, что вы ищете условную агрегацию:

SELECT        
    I.ItemCode, 
    SUM(CASE WHEN T.TransactionSign = 1  THEN 1 ELSE 0 END) AS Add_Sum,
    SUM(CASE WHEN T.TransactionSign = -1 THEN 1 ELSE 0 END) AS Minus_Sum,
    SUM(T.TransactionSign) difference
FROM 
    inMoveHd AS H INNER JOIN
    inMoveLn AS L ON L.InvMoveID = H.InvMoveID INNER JOIN
    inItem AS I ON I.ItemID = L.ItemID INNER JOIN
    inTransactionType AS T ON H.TransactionTypeID = T.TransactionTypeID
WHERE  T.TransactionSign IN (-1, 1)
GROUP BY I.ItemCode
1 голос
/ 31 октября 2019

Используйте case выражений для выполнения условного агрегирования :

SELECT  I.ItemCode,
        COUNT(case when T.TransactionSign = 1 then H.TransactionTypeID end) AS ADD_Sum,
        COUNT(case when T.TransactionSign = -1 then H.TransactionTypeID end) AS Minus_Sum
FROM      inMoveHd AS H INNER JOIN
                   inMoveLn AS L ON L.InvMoveID = H.InvMoveID INNER JOIN
                   inItem AS I ON I.ItemID = L.ItemID INNER JOIN
                   inTransactionType AS T ON H.TransactionTypeID = T.TransactionTypeID
WHERE  (T.TransactionSign = -1 or T.TransactionSign = 1)
GROUP BY I.ItemCode
...