有AB两个表A表
车间     姓名      数量
车间1    张三     100
车间1   李四      200
车间1   赵大大    200
车间2   王五       300B表
车间 姓名 消耗数量
车间1    张三    50
车间1   李四     10
车间1   李四     90实现连接结果要求如下
车间        姓名         数量       消耗数量
车间1      张三         100            50
车间1     李四          200            100
车间1     赵大大       200             0
车间2      王五         300             0如何将两表的查询结果合并在一起,汇总第二个表的数据,以车间和姓名作为连接字段但是又不丢失第一个表的数据

解决方案 »

  1.   

    --测试数据
    if not object_id(N'Tempdb..#A') is null
    drop table #A
    Go
    Create table #A([车间] nvarchar(23),[姓名] nvarchar(23),[数量] int)
    Insert #A
    select N'车间1',N'张三',100 union all
    select N'车间1',N'李四',200 union all
    select N'车间1',N'赵大大',200 union all
    select N'车间2',N'王五',300
    GO
    if not object_id(N'Tempdb..#B') is null
    drop table #B
    Go
    Create table #B([车间] nvarchar(23),[姓名] nvarchar(22),[消耗数量] int)
    Insert #B
    select N'车间1',N'张三',50 union all
    select N'车间1',N'李四',10 union all
    select N'车间1',N'李四',90
    Go
    --测试数据结束
    SELECT #A.*,ISNULL(t.消耗数量,0) 消耗数量
    FROM #A
        LEFT JOIN
        (SELECT 车间, 姓名, SUM(消耗数量) AS 消耗数量 FROM #B GROUP BY 车间, 姓名) t
            ON t.姓名 = #A.姓名
               AND t.车间 = #A.车间;
      

  2.   

    我模仿你的代码改了,加了isnull,但是我生成的表消耗数量为0的数据还是带不出来。
      

  3.   

    select t2.FOrderBillNo as 销售订单号,t2.FItemID,t5.FNumber,t5.FName as 物料名称,t5.FModel as 规格型号,
    t1.FAuxQty 客户下单数,isnull(t2.lj,0) as 累计发货数,t1.FDate 客户要求发货日,t4.FName 业务员 
    from  SEOrderEntry t1
    left join (select FOrderInterID,FOrderBillNo,FItemID,sum(isnull(FQty,0)) as lj 
    from icstockbillentry
    group by FOrderInterID,FOrderBillNo,FItemID
    )t2 
     on t1.FInterID=t2.FOrderInterID and t1.FItemID=t2.FItemID 
    left join  SEOrder t3 on t1.FInterID=t3.FInterID
    left join t_user t4 on t4.FUserID=t3.FEmpID
    left join t_ICItem t5 on t5.FItemID=t2.FItemID
    where 
    t2.FOrderBillNo='seord010931'
    order by t2.FOrderBillNo,t2.FItemID我实际的源代码是这样的,执行的时候只出来 t1.FInterID=t2.FOrderInterID and t1.FItemID=t2.FItemID的数据,如果t2.FItemID没有数据t1的t1.FInterID=t2.FOrderInterID的数据就会被忽略掉