提供思路:
可以尝试完全联接,不过如果左表,右表不满足条件的字段值将会以null值填充,而不是以0填充,这样如果可以
select 字段列表名 from 左表名 full join 右表名 on 联接条件

解决方案 »

  1.   

    ----------------------------------------------------------------
    -- Author  :DBA_HuangZJ(发粪涂墙)
    -- Date    :2014-05-14 08:05:00
    -- Version:
    --      Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) 
    -- Apr  2 2010 15:48:46 
    -- Copyright (c) Microsoft Corporation
    -- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
    --
    ----------------------------------------------------------------
    --> 测试数据[T1]
    if object_id('[T1]') is not null drop table [T1]
    go 
    create table [T1]([客户] nvarchar(4),[应付] int,[余额1] int)
    insert [T1]
    select N'张三',100,50 union all
    select N'李四',200,70 union all
    select N'王五',180,40
    --> 测试数据[T2]
    if object_id('[T2]') is not null drop table [T2]
    go 
    create table [T2]([客户] nvarchar(4),[应收] int,[余额2] int)
    insert [T2]
    select N'张三',50,30 union all
    select N'赵六',170,100 union all
    select N'周九',300,200
    --------------生成数据--------------------------
    select ISNULL(a.[客户],b.[客户])[客户],ISNULL(a.[应付],0)[应付]
    ,ISNULL(a.[余额1],0)[余额1],ISNULL(b.[应收],0)[应收],ISNULL(b.[余额2],0)[余额2]
    from [T1] a FULL JOIN [T2] b ON A.[客户]=b.[客户]
    ----------------结果----------------------------
    /* 
    客户   应付          余额1         应收          余额2
    ---- ----------- ----------- ----------- -----------
    张三   100         50          50          30
    李四   200         70          0           0
    王五   180         40          0           0
    赵六   0           0           170         100
    周九   0           0           300         200
    */