表1:
姓名  类别      数量
张三  AAAA    10
张三                 8
李四  BBBB     5
张三  AAAA     5
李四  BBBB     10表2:
张三  AAAA    25
张三                10
李四  BBBB     15用姓名+类别作为条件,希望比较表1和表2的差额,得出表3:
张三 AAAA  -5
张三             -2
李四 BBBB   10实际用ON条件,因为表1和表2的第二行类别为NULL,所以得不出表3的第二行,实际结果是:
张三 AAAA -5
李四 BBBB 10sql语句是insert into 表3 select 表1.姓名,表1.类别,sum(表1.数量-表2.数量) as 数量 from 表1 inner join 表2 ON 表1.姓名=表2.姓名 AND 表1.类别=表2.类别请问如果希望区分“张三 AAAA”和“张三    ”,该如何写SQL语句。感谢!

解决方案 »

  1.   

    if not object_id('Tempdb..#T1') is null
    drop table #T1
    Go
    Create table #T1([姓名] nvarchar(2),[类别] nvarchar(4),[数量] int)
    Insert #T1
    select N'张三',N'AAAA',10 union all
    select N'张三',null,8 union all
    select N'李四',N'BBBB',5 union all
    select N'张三',N'AAAA',5 union all
    select N'李四',N'BBBB',10
    Go
    --> --> 
     
    if not object_id('Tempdb..#T2') is null
    drop table #T2
    Go
    Create table #T2([姓名] nvarchar(2),[类别] nvarchar(4),[数量] int)
    Insert #T2
    select N'张三',N'AAAA',25 union all
    select N'张三',null,10 union all
    select N'李四',N'BBBB',15
    Go
    select 
    a.[姓名],a.[类别],a.[数量]-b.[数量] as [数量]
    from 
    (Select [姓名],[类别]=isnull([类别],''),sum([数量])  as [数量] from #T1 group by [姓名],isnull([类别],'')) as a
    inner join #T2 as b on a.[姓名]=b.[姓名] and a.[类别]=isnull(b.[类别],'')/*
    姓名 类别 数量
    李四 BBBB 0
    张三 -2
    张三 AAAA -10
    */