Sql 将两个查询连接到一个表并减去值

Sql 将两个查询连接到一个表并减去值,sql,join,pivot,Sql,Join,Pivot,我需要将这两个输出值(Add_sum和减_sum)放到一个表中,然后减去它们(Add_sum-减_sum)并显示此值 我尝试了许多其他的选择,子查询等,但无法让它工作 问题1: SELECT I.ItemCode, COUNT(H.TransactionTypeID) AS ADD_Sum FROM inMoveHd AS H INNER JOIN inMoveLn AS L ON L.InvMoveID =

我需要将这两个输出值(
Add_sum
减_sum
)放到一个表中,然后减去它们(
Add_sum-减_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

使用
case
表达式进行条件聚合:

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

我认为您正在寻找条件聚合:

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

帮助你要容易些,我希望会更好