(查询)怎么将以下两个结果联结显示(完全解决结帖100分)

SoftwKLC 2007-04-13 11:48:40
我有三个表 表A、表B、表C
-----------A表结构如下:---------------------
类型 来料时间 来料单号 料名,供应商,来料数
Atype mdata Amcode mname pname Amnum
-----------B表结构如下:---------------------
类型 来料时间 来料单号 料名,供应商,来料数
Btype mdata Bmcode mname pname Bmnum
-----------C表结构如下:--------------------
类型 料名 库存数
Ctype mname Cmnum
----------------------------------------------------
select * from A where Mdata>'2007-04-10'
结果:类型 料名 供应商 来料单号 来料时间 来料数
1001 电源 一厂 A-1001 2007-04-11 40
1002 电源 一厂 A-1002 2007-04-15 10
select * from B where Mdata>'2007-04-10'
结果:类型 料名 供应商 发料单号 发料时间  发料数
1001 电源 一厂 B-1001 2007-04-12 20
1002 电源 一厂 B-1002 2007-04-20 10
----------------------------------------------------
怎么按时间(Mdata>007-04-10)查询得到如下结果:
类型 料名 供应商 来料单号 来料时间 来料数 发料单号 发料时间 发料数
1001 电源 一厂 A-1001 2007-04-11 40 B-1001 2007-04-12 20
1002 主板 二厂 A-1002 2007-04-15 10 B-1002 2007-04-20 10
...全文
256 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
SoftwKLC 2007-04-13
  • 打赏
  • 举报
回复
非常感谢大家
不好意思,再关联C查询,等test马上结帖
--------------------
select * from C
类型 料名 现库存
1001 电源 20
1002 主板 0 
--------------------
怎么按时间(Mdata>007-04-10)查询得到如下结果:
类型 料名 供应商 来料单号 来料时间 来料数 发料单号 发料时间 发料数 现库存 
1001 电源 一厂 A-1001 2007-04-11 40 B-1001 2007-04-12 20   20
1002 主板 二厂 A-1002 2007-04-15 10 B-1002 2007-04-20 10 0
dawugui 2007-04-13
  • 打赏
  • 举报
回复
--主板?那里来的?

select m.类型, m.料名, m.供应商, m.来料单号, m.来料时间,m.来料数,n.发料单号,n.发料时间,n.发料数 from
(
select * from A where Mdata>'2007-04-10'
) m
left join
(
select * from B where Mdata>'2007-04-10'
) n
on m.类型 = n.类型 and m.料名 = n.料名 and m.供应商 = n.供应商
LiBin_OberthurCS 2007-04-13
  • 打赏
  • 举报
回复
select
a.Atype,a.mname,a.pname,a.Amcode,a.mdata,a.Amnum,
b.Bmcode,b.mdata,b.Bmnum
from
A
left join
B
on
a.Atype=b.Btype and a.mname=b.mname and a.pname=b.pname
where
a.Mdata>'2007-04-10' and b.Mdata>'2007-04-10'
lin_now 2007-04-13
  • 打赏
  • 举报
回复
赶快揭贴..让我再穿个裤衩
CathySun118 2007-04-13
  • 打赏
  • 举报
回复
select A.*,B.发料单号, B.发料时间, B.发料数 from A,B where A.类型=B.类型 and
A.Mdata>'2007-04-10' order by 类型
dawugui 2007-04-13
  • 打赏
  • 举报
回复
select m.类型, m.料名, m.供应商, m.来料单号, m.来料时间,m.来料数,n.发料单号,n.发料时间,n.发料数 from
(
select * from A where Mdata>'2007-04-10'
) m
left join
(
select * from B where Mdata>'2007-04-10'
) n
on m.类型 = n.类型
lin_now 2007-04-13
  • 打赏
  • 举报
回复
select a.*,b.* from (select * from A where Mdata>'2007-04-10')a
left join (select * from b where Mdata>'2007-04-10') b on a.类型=b.类型
leo_lesley 2007-04-13
  • 打赏
  • 举报
回复
select A.类型, A.料名, A.供应商, A.来料单号, A.来料时间, A.来料数, B.发料单号, B.发料时间, B.发料数
from A , B
where A.Mdata>'2007-04-10' and B.Mdata>'2007-04-10' and A.类型=B.类型
lin_now 2007-04-13
  • 打赏
  • 举报
回复
left join 不行么?????????????????
SoftwKLC 2007-04-13
  • 打赏
  • 举报
回复
目前这个我是用ACCESS做数据库
我可以CREATE这个创建表吗?
lovedick 2007-04-13
  • 打赏
  • 举报
回复
支持dawugui(潇洒老乌龟)
有没有存在
1001 电源 一厂 A-1001 2007-04-11 40
1002 主板 二厂 A-1002 2007-04-15 10
1003 鼠标 三厂 A-1003 2007-04-18 100
1001 电源 一厂 A-1001 2007-04-8 50
doodle 2007-04-13
  • 打赏
  • 举报
回复
select
a.Atype,a.mname,a.pname,a.Amcode,a.mdata,a.Amnum,
b.Bmcode,b.mdata,b.Bmnum,c.Cmnum
from A left join B
on a.Atype=b.Btype and a.mname=b.mname and a.pname=b.pname
left join c
on a.Atype = c.Ctype and a.mname = c.mname
where a.Mdata>'2007-04-10' and b.Mdata>'2007-04-10'
--如果你的类型是唯一的话,可以不比较mname和pname
dawugui 2007-04-13
  • 打赏
  • 举报
回复
--C可以不需要.

if object_id('pubs..A') is not null
drop table A
go
create table A(类型 varchar(10),料名 varchar(10),供应商 varchar(10),来料单号 varchar(10),来料时间 varchar(10),来料数 int)
insert into A(类型,料名,供应商,来料单号,来料时间,来料数) values('1001', '电源', '一厂', 'A-1001', '2007-04-11', 40)
insert into A(类型,料名,供应商,来料单号,来料时间,来料数) values('1002', '主板', '二厂', 'A-1002', '2007-04-15', 10)
insert into A(类型,料名,供应商,来料单号,来料时间,来料数) values('1003', '鼠标', '三厂', 'A-1003', '2007-04-18', 100)
go

if object_id('pubs..B') is not null
drop table B
go
create table B(类型 varchar(10),料名 varchar(10),供应商 varchar(10),发料单号 varchar(10),发料时间 varchar(10),发料数 int)
insert into B(类型,料名,供应商,发料单号,发料时间,发料数) values('1001', '电源', '一厂', 'B-1001', '2007-04-12', 20)
insert into B(类型,料名,供应商,发料单号,发料时间,发料数) values('1002', '主板', '二厂', 'B-1002', '2007-04-20', 10)
go

select M.* , isnull(N.发料单号,'') 发料单号,isnull(N.发料时间,'') 发料时间,isnull(N.发料数,0) 发料数,M.来料数 - isnull(N.发料数,0) 现库存
from
(
select * from A where 来料时间>'2007-04-10'
) M
left join
(
select * from B where 发料时间>'2007-04-10'
) N
on M.类型 = N.类型

drop table A,B

/*
类型 料名 供应商 来料单号 来料时间 来料数 发料单号 发料时间 发料数 现库存
----- ----- ------- ---------- ---------- ------- ---------- ---------- ----------- ------
1001 电源 一厂 A-1001 2007-04-11 40 B-1001 2007-04-12 20 20
1002 主板 二厂 A-1002 2007-04-15 10 B-1002 2007-04-20 10 0
1003 鼠标 三厂 A-1003 2007-04-18 100 0 100

(所影响的行数为 3 行)
*/
lin_now 2007-04-13
  • 打赏
  • 举报
回复
select a.类型,
a.料名,
b.供应商,
b.来料单号,
b.来料时间,
b.来料数,
c.发料单号,
c.发料时间,
c.发料数,
a.现库存
from c a
left join (select * from A where 来料时间>'2007-04-10') b on a.类型=b.类型
left join (
select * from B where 发料时间>'2007-04-10'
) c on a.类型=c.类型
lin_now 2007-04-13
  • 打赏
  • 举报
回复
create table A
(类型 int,
料名 varchar(50),
供应商 varchar(50),
来料单号 varchar(50),
来料时间 datetime,
来料数 int )
go
create table b
(类型 int,
料名 varchar(50),
供应商 varchar(50),
发料单号 varchar(50),
发料时间 datetime,
发料数 int )
go
create table c
(
类型 int,
料名 varchar(50),
现库存 int
)

-------------------------------------
insert into a
select 1001, '电源', '一厂', 'A-1001', '2007-04-11', 40
union all
select 1002, '主板' , '二厂', 'A-1002', '2007-04-15', 10
union all
select 1003, '鼠标' ,'三厂', 'A-1003', '2007-04-18', 100
go

insert into b
select 1001, '电源', '一厂', 'B-1001', '2007-04-12', 20
union all
select 1002, '主板', '二厂', 'B-1002', '2007-04-20', 10

go

insert into c
select 1001,'电源',20
union all
select 1002,'主板',0
union all
select 1003,'鼠标',100

select a.类型,
a.料名,
b.供应商,
b.来料单号,
b.来料时间,
b.来料数,
c.发料单号,
c.发料时间,
c.发料数,
a.现库存
from c a
left join a b on a.类型=b.类型
left join b c on a.类型=c.类型
SoftwKLC 2007-04-13
  • 打赏
  • 举报
回复
不好意思!上午提问没提交清楚
我有三个表 表A、表B、表C
-----------A表结构如下:---------------------
类型 来料时间 来料单号 料名,供应商,来料数
Atype mdata Amcode mname pname Amnum
-----------B表结构如下:---------------------
类型 来料时间 来料单号 料名,供应商,来料数
Btype mdata Bmcode mname pname Bmnum
-----------C表结构如下:--------------------
类型 料名 库存数
Ctype mname Cmnum
----------------------------------------------------
select * from A where Mdata>'2007-04-10'
结果:类型 料名 供应商 来料单号 来料时间 来料数
1001 电源 一厂 A-1001 2007-04-11 40
1002 主板 二厂 A-1002 2007-04-15 10
1003 鼠标 三厂 A-1003 2007-04-18 100
select * from B where Mdata>'2007-04-10'
结果:类型 料名 供应商 发料单号 发料时间  发料数
1001 电源 一厂 B-1001 2007-04-12 20
1002 主板 二厂 B-1002 2007-04-20 10
select * from C
结果:类型 料名 现库存
1001 电源 20
1002 主板 0
1003 鼠标 100
----------------------------------------------------
怎么按时间(Mdata>007-04-10)查询得到如下结果:
类型 料名 供应商 来料单号 来料时间 来料数 发料单号 发料时间 发料数 现库存
1001 电源 一厂 A-1001 2007-04-11 40 B-1001 2007-04-12 20  20
1002 主板 二厂 A-1002 2007-04-15 10 B-1002 2007-04-20 10 0
1003 鼠标 三厂 A-1003 2007-04-18 100 100
qizhi_t 2007-04-13
  • 打赏
  • 举报
回复
靠在,这样也行?
呵呵,如果有两笔进料,一笔出料.呵呵,这个查询有什么效果呢.
楼上如果做库存管理,在出料哪个表里面最少也要记录是出的哪个进料单的.
呵呵,要不永远只能只能到底还有多少库存,总共进了多少,出了多少.
到底进的是怎么出完的,出的是怎么进的,这些肯定要查询的东西会让人伤心
SoftwKLC 2007-04-13
  • 打赏
  • 举报
回复
假如只来料了没有发料
则显示
类型 料名 供应商 来料单号 来料时间 来料数 发料单号 发料时间 发料数 现库存 
1001 电源 一厂 A-1001 2007-04-11 40  B-1001 2007-04-12 20   20
1002 主板 二厂 A-1002 2007-04-15 10  B-1002 2007-04-20 10 0
1003 鼠标 三厂 A-1003 2007-04-12 100  100

34,576

社区成员

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

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