两个表的连接

2019菜鸟007 2019-05-16 01:15:40
有AB两个表

A表
车间 姓名 数量
车间1 张三 100
车间1 李四 200
车间1 赵大大 200
车间2 王五 300

B表
车间 姓名 消耗数量
车间1 张三 50
车间1 李四 10
车间1 李四 90

实现连接结果要求如下
车间 姓名 数量 消耗数量
车间1 张三 100 50
车间1 李四 200 100
车间1 赵大大 200 0
车间2 王五 300 0

如何将两表的查询结果合并在一起,汇总第二个表的数据,以车间和姓名作为连接字段但是又不丢失第一个表的数据
...全文
51 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
2019菜鸟007 2019-05-16
  • 打赏
  • 举报
回复
执行出来是这样的,少一行
2019菜鸟007 2019-05-16
  • 打赏
  • 举报
回复
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的数据就会被忽略掉
2019菜鸟007 2019-05-16
  • 打赏
  • 举报
回复
引用 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.车间;





我模仿你的代码改了,加了isnull,但是我生成的表消耗数量为0的数据还是带不出来。
二月十六 版主 2019-05-16
  • 打赏
  • 举报
回复
--测试数据
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.车间;


34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧