求一个方案,关于查看更改的问题@@@

yingming77 2006-04-19 03:32:50
产品表:
----------------
产品编码 机型
0606001 EBZ100
0606002 EBZ100
0605003 EBZ200

物料:
-----------------
物料编码 名称 规格 尾码
BJ000001 螺栓 M12*20 a

明细:
-------------
机型 物料编码 所属装配 数量
EBZ100 BJ000001 EBZ100.1.1 20


现在:从产品0601002开始,物料编码为BJ000001的物料尾码变成b,希望能得到这样的功能:
查产品编码为0606001的产品的所有物料情况.
当查到尾码有变更情况的时候
能把查询的尾码,变换为更新的尾码,
即,查0601001以前的产品,物料编码为BJ0000001的尾码为a,
而查0601002的时候,物料编码为BJ0000001的尾码为b,
其以后的产品,该物料都为b,
如果再次更新为c,那么查更新以后的产品的该物料的尾码,是新尾码c
在这期间,物料编码都为b,
在本次更新以前,物料编码都为a
问,这如何实现,摆脱大家!!!!!
...全文
152 10 点赞 打赏 收藏 举报
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
yingming77 2006-04-20
en,这个问题快解决了,我用了两个临时表,用了group by 等等。
谢谢ilikeido的帮助!
谢谢xiaoku的帮助!
还有一个问题,我新开一贴吧:)
  • 打赏
  • 举报
回复
itblog 2006-04-19
看一下,这个结果哪里不合你的要求,因为里面有些字段关系我还是搞不明白,你可以根据这个结果提出问题:

--测试表
create table 产品表(产品编码 varchar(10),机型 varchar(10))
insert 产品表 select '0606001','EBZ100'
union all select '0606002','EBZ100'
union all select '0606003','EBZ200'

create table 物料(物料编码 varchar(10),名称 varchar(10),规格 varchar(10),尾码 varchar(10))
insert 物料 select 'BJ000001','螺栓','M12*20','a'
union all select 'BJ000002','螺栓','M12*21','a'


create table 明细(机型 varchar(10),物料编码 varchar(10),所属装配 varchar(10),数量 int)
insert 明细 select 'EBZ100','BJ000001','EBZ100.1.1',20
union all select 'EBZ100','BJ000002','EBZ100.1.1',20
union all select 'EBZ200','BJ000001','EBZ200.1.2',10
union all select 'EBZ200','BJ000002','EBZ200.1.2',10

create table 尾码变更表(物料编码 varchar(10),机型 varchar(10),原尾码 varchar(10),新尾码 varchar(10),改变时的产品编号 varchar(10))
insert 尾码变更表 select 'BJ00001','EBZ100','a','b','0606003'
union all select 'BJ00002','EBZ100','a','b','0606003'


--执行语句
select a.产品编码,a.机型,a.物料编码,a.所属装配,a.数量,a.名称,a.规格,b.物料编码,
尾码=case when isnull(b.新尾码,'')='' then a.尾码 else b.新尾码 end from (
select 产品编码,c.机型,w.物料编码,所属装配,数量,名称,规格,尾码 from 明细 m
left join 产品表 c on m.机型 =c.机型
left join 物料 w on m.物料编码=w.物料编码
) a
left join
(
select * from 尾码变更表 d where not exists(select * from 尾码变更表 where 机型=d.机型 and 改变时的产品编号=d.改变时的产品编号 and 物料编码>d.物料编码)

) b
on a.机型=b.机型 and a.产品编码=b.改变时的产品编号
order by a.产品编码,b.物料编码

--执行结果
/*
0606001 EBZ100 BJ000001 EBZ100.1.1 20 螺栓 M12*20 NULL a
0606001 EBZ100 BJ000002 EBZ100.1.1 20 螺栓 M12*21 NULL a
0606002 EBZ100 BJ000002 EBZ100.1.1 20 螺栓 M12*21 NULL a
0606002 EBZ100 BJ000001 EBZ100.1.1 20 螺栓 M12*20 NULL a
0606003 EBZ200 BJ000001 EBZ200.1.2 10 螺栓 M12*20 NULL a
0606003 EBZ200 BJ000002 EBZ200.1.2 10 螺栓 M12*21 NULL a
0606003 EBZ100 BJ000001 EBZ100.1.1 20 螺栓 M12*20 BJ00002 b
0606003 EBZ100 BJ000002 EBZ100.1.1 20 螺栓 M12*21 BJ00002 b

*/
  • 打赏
  • 举报
回复
yingming77 2006-04-19
另外,从产品表中查询,该产品编号的产品是什么机型的产品,就可以对应到明细里的物料编码
  • 打赏
  • 举报
回复
yingming77 2006-04-19
哦,两种机型都有这种物料,它是标准件,每个机型都可以有
  • 打赏
  • 举报
回复
itblog 2006-04-19
不对啊

你给的数据

物料:
-----------------
物料编码 名称 规格 尾码
BJ000001 螺栓 M12*20 a
BJ000002 螺栓 M12*21 a
------------------------------
明细:
-------------
机型 物料编码 所属装配 数量
EBZ100 BJ000001 EBZ100.1.1 20
EBZ100 BJ000002 EBZ100.1.1 20
EBZ200 BJ000001 EBZ200.1.2 10
EBZ200 BJ000002 EBZ200.1.2 10

怎么可能区别出物料编码对应明细中的哪个?还少一些条件~
不可能两种机型的都有吧~
  • 打赏
  • 举报
回复
yingming77 2006-04-19
嗯,没有,不过产品编号是递增的
  • 打赏
  • 举报
回复
itblog 2006-04-19
字段有没有涉及到时间的字段?
  • 打赏
  • 举报
回复
yingming77 2006-04-19
目的是为了当某种类型的机型设计更改的后,(即物料尾码变化)
该产品以后的产品,物料编码为更新的尾码,而以前的产品,是以前的尾码,
为了区别,
  • 打赏
  • 举报
回复
xiaoku 2006-04-19
实在是有点看不懂
  • 打赏
  • 举报
回复
xiaoku 2006-04-19
目的是维护这个表中的尾码字段吗?

物料:
-----------------
物料编码 名称 规格 尾码
BJ000001 螺栓 M12*20 a
  • 打赏
  • 举报
回复
相关推荐
发帖
应用实例
加入

2.7w+

社区成员

MS-SQL Server 应用实例
申请成为版主
帖子事件
创建了帖子
2006-04-19 03:32
社区公告
暂无公告