我需要一些帮助来确定我需要什么连接类型/逻辑。我有以下数据:
DISTRIBUTION_ACCOUNT_ID
列来自我左连接到下面的表(GL_CODE_COMBINATIONS
),我想匹配以绿色选择的行,其中包括已填充值的行以及NULL
行。我还想排除 GL.SEGMENT3 <> 945
的行(这与包含 DISTRIBUTION_ACCOUNT_ID
61012 和 15000 的行相同)。问题是左外连接没有用 61012 过滤掉顶行,如果我将连接切换到 INNER JOIN
那么排除 GL.SEGMENT3 <> 945
的逻辑工作正常,但它也会过滤掉下面的空白行,我还想要。
(SELECT ABS(ROUND((SUM(PRIMARY_QUANTITY)/30),2)) AS BURN_RATE, TXN.ORGANIZATION_ID, TXN.INVENTORY_ITEM_ID,
TXN.SUBINVENTORY_CODE , TXN.DISTRIBUTION_ACCOUNT_ID, GL.SEGMENT3
FROM INV_MATERIAL_TXNS TXN
LEFT OUTER JOIN INV_TRANSACTION_TYPES_TL TYPE ON TYPE.TRANSACTION_TYPE_ID = TXN.TRANSACTION_TYPE_ID
LEFT OUTER JOIN GL_CODE_COMBINATIONS GL ON GL.CODE_COMBINATION_ID = TXN.DISTRIBUTION_ACCOUNT_ID
AND GL.SEGMENT3 <> 945
WHERE TRANSACTION_DATE >= TRUNC(SYSDATE-30)
AND TRANSACTION_DATE < TRUNC(SYSDATE)
AND TXN.INVENTORY_ITEM_ID = 100002040645155
GROUP BY TXN.ORGANIZATION_ID, TXN.INVENTORY_ITEM_ID, TXN.SUBINVENTORY_CODE , TXN.DISTRIBUTION_ACCOUNT_ID
, GL.SEGMENT3 )
如果我将
GL_CODE_COMBINATIONS
切换为 INNER JOIN
,那么在下面的结果中,我会根据需要过滤掉 61012 和 15000 行,但随后它也会(底层)过滤掉上面的 3 个空白行,如下所示。如何确保我仍然包含空格,但过滤掉其他两个?
添加
WHERE
过滤器,检查 OUTER JOIN
是否不匹配任何内容或您的条件是否匹配:
SELECT ABS(ROUND((SUM(PRIMARY_QUANTITY)/30),2)) AS BURN_RATE,
TXN.ORGANIZATION_ID,
TXN.INVENTORY_ITEM_ID,
TXN.SUBINVENTORY_CODE,
TXN.DISTRIBUTION_ACCOUNT_ID,
GL.SEGMENT3
FROM INV_MATERIAL_TXNS TXN
LEFT OUTER JOIN INV_TRANSACTION_TYPES_TL TYPE
ON TYPE.TRANSACTION_TYPE_ID = TXN.TRANSACTION_TYPE_ID
LEFT OUTER JOIN GL_CODE_COMBINATIONS GL
ON GL.CODE_COMBINATION_ID = TXN.DISTRIBUTION_ACCOUNT_ID
WHERE TRANSACTION_DATE >= TRUNC(SYSDATE-30)
AND TRANSACTION_DATE < TRUNC(SYSDATE)
AND TXN.INVENTORY_ITEM_ID = 100002040645155
AND ( GL.CODE_COMBINATION_ID IS NULL -- Only happens when OUTER JOIN does not match.
OR GL.SEGMENT3 <> 945 )
GROUP BY
TXN.ORGANIZATION_ID,
TXN.INVENTORY_ITEM_ID,
TXN.SUBINVENTORY_CODE,
TXN.DISTRIBUTION_ACCOUNT_ID,
GL.SEGMENT3