可以逐个单元地将数据库查询到excel?或另一种解决方案......?

时间:2013-11-04 21:02:32

标签: database excel tsql excel-vba vba

我有各种大型视图/存储过程,基本上可以将大量数据转换为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条款。 这导致最少的问题......然后以某种方式直接查询每个不一致的单元格值,因为它只影响几个单元格。虽然我已经搜索过,但我认为这不可行。 这可能吗??或者还有另一种方法可以在数据库端修复此问题吗?

1 个答案:

答案 0 :(得分:1)

正如您已经解决的那样,问题出现在ON子句中,并使用了 NULL

NULL 更改为可以匹配的值的一种方法是使用COALESCE,这会将子句更改为:

ON coalesce(vd.contract,'No Contract') = coalesce(col.contract,'No Contract')

这会将所有 NULL 变为'无合约',这将更改 NULL = NULL 测试(将返回 NULL '无合同'='无合同',将返回 True