在下面的查询中 c.EXTRA_CALLOFF_FLAG = a.EXTRA_CALLOFF_FLAG它有两个匹配项,一个是Y,其他值是NULL
SELECT PICKUP_WK_NBR,REGION_CD,GLOBAL_DUNS_NBR,GLOBAL_SUPPLIER_NAME,a.EXTRA_CALLOFF_FLAG,
nvl((SELECT sum(c.CALLOFF_QTY)
FROM GMMT_OWNER.OR_SA_ATTAIN_DTL_T c join GMMT_OWNER.OR_SA_INCOTERMS_T d
on
c.SUPPLIER_INCOTERMS_1_CD = d.INCOTERMS_CD
WHERE
d.PICKUP_ARRIVAL_FLAG='P' and
a.PICKUP_WK_NBR = c.PICKUP_WK_NBR and
a.GLOBAL_DUNS_NBR = c.GLOBAL_DUNS_NBR and
a.REGION_CD=c.REGION_CD and
c.EXTRA_CALLOFF_FLAG = a.EXTRA_CALLOFF_FLAG and
a.SUPPLIER_INCOTERMS_1_CD = c.SUPPLIER_INCOTERMS_1_CD
),0) total_items_ordered
FROM
GMMT_OWNER.OR_SA_ATTAIN_DTL_T a join GMMT_OWNER.OR_SA_INCOTERMS_T b on
a.SUPPLIER_INCOTERMS_1_CD = b.INCOTERMS_CD
WHERE
b.PICKUP_ARRIVAL_FLAG='P' and
(a.PICKUP_WK_NBR between '201301' AND '201301') and
a.SUPPLIER_INCOTERMS_1_CD IN ('EXW') and
a.GLOBAL_DUNS_NBR IN ('43898092') and
a.REGION_CD IN ('AP')
GROUP BY
PICKUP_WK_NBR,REGION_CD,GLOBAL_DUNS_NBR,GLOBAL_SUPPLIER_NAME,a.EXTRA_CALLOFF_FLAG,a.SUPPLIER_INCOTERMS_1_CD
ORDER BY a.PICKUP_WK_NBR;
它给出了错误的结果。我不确定内表和外表连接之间的NULL是否匹配?
答案 0 :(得分:0)
正如戈登在评论中所说,你不能把null视为一种价值。
但是,你应该重新考虑加入一个可以为null的列。
听起来你想把它视为一种可能的价值。一种方法是使用nvl()。
以下是一种使连接条件具有值的方法。引号之间的字符串必须在等于的两边相同。
更改
c.EXTRA_CALLOFF_FLAG = a.EXTRA_CALLOFF_FLAG
到
nvl(c.EXTRA_CALLOFF_FLAG, 'null') = nvl(a.EXTRA_CALLOFF_FLAG, 'null')