我有各种大型视图/存储过程,基本上可以将大量数据转换为excel电子表格。有一个问题,不是所有的 公司数额没有流过。我将其缩小为存储过程中的一段代码:(注意,为简单起见,这是减少的)
LEFT OUTER JOIN view_creditrating internal_creditrating
ON creditparty.creditparty =
internalrating.company
LEFT OUTER JOIN (SELECT company, contract, SUM(amount) amount
FROM COMMON_OBJ.amount
WHERE status = 'Active'
GROUP BY company, contract) col
ON vd.contract = col.contract
表有问题:
company | contract | amount |
| | |
TVC | NULL | 1006 |
KS | 10070 | -2345 |
NYC-G | 10060 | 334000 |
NYC-G | 100216 | 4000 |
UECR | NULL | 0 |
SP | 10090 | 84356 |
基本上一些合约是NULL。所以当合约上有一个LEFT OUTER JOIN时,合约中的空值会退出并且不会流过...所以我决定基于公司来做。 这也会导致问题,因为公司不止一次出现在表格中以显示不同的合同。通过此更改,查询变得模糊,因为它不知道我是否想要 合同10060的金额或合同100216的金额,而且往往给我不正确的金额。我想与公司=公司留下最后的ON条款。 这导致最少的问题......然后以某种方式直接查询每个不一致的单元格值,因为它只影响几个单元格。虽然我已经搜索过,但我认为这不可行。 这可能吗??或者还有另一种方法可以在数据库端修复此问题吗?
答案 0 :(得分:1)
正如您已经解决的那样,问题出现在ON
子句中,并使用了 NULL 。
将 NULL 更改为可以匹配的值的一种方法是使用COALESCE
,这会将子句更改为:
ON coalesce(vd.contract,'No Contract') = coalesce(col.contract,'No Contract')
这会将所有 NULL 变为'无合约',这将更改 NULL = NULL 测试(将返回 NULL )'无合同'='无合同',将返回 True