求一个存储过程,高手帮帮忙:)急

yingming77 2006-04-19 08:08:07
问题是这样的,有表如下
物料(物料编号,尾码,...)
明细(机型,物料编号,...)
产品表(产品编号 int,机型,...)
尾码变更表(原尾码,新尾码,机型,改变时的产品编号...)
现想在输入一个产品编号的时候
可以得到这个产品包含的所有物料情况,
其中:
如果该产品尾码不改变,就用原来的尾码
如果该产品的尾码改变,要查询尾码变更表得到,
产品编号是递增的,如果当前的产品编号>尾码表里的最新的编号,那么该物料尾码采用尾码表里的新尾码,否则采用原尾码,
这个是如何实现的呢?或者还有什么其他的好办法能解决这个问题,请高手帮帮忙,非常感谢!
...全文
253 12 点赞 打赏 收藏 举报
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
itblog 2006-04-19
create proc sp_fno
@no varchar(20)
as
select * from 物料 w
right join 明细 m
on w.物料编号=m.物料编号
right join 产品表 c
on m.机型=c.机型
right join 尾巴变更表 wm
on c.机型=wm.机型
where 产品编号=@no


由于表太多,关系搞不太懂,例子数据也没有,你可以针对这个过程提问~
  • 打赏
  • 举报
回复
yingming77 2006-04-19
产品对应机型,机型对应物料,尾码变更表,对应某一机型的从某一产品编号开始以前是用什么编码,以后是应用什么编码。
  • 打赏
  • 举报
回复
yingming77 2006-04-19
对应一个产品编号,通过产品表查询它所对应的机型
通过明细表,查询该机型对应的物料表,查到所有的物料信息,
通过尾码变更表,查询该物料在该机型上的该产品上的尾码
  • 打赏
  • 举报
回复
yingming77 2006-04-19
尾码在物料表中的作用是:标示着该物料的版本号,因为这个物料是根据设计图纸做出来的,如果设计图纸变更,在这个图纸号码后面加一个尾码。
当设计图纸变更的时候,要填写一个尾码变更表,这里注明:尾码变更的物料的编码,变更时的产品编号,该产品属于那种类型。
判断变更:如果该物料在该机型的此产品编码变更,那么此机型的相应的产品的该物料的尾码将是尾码变更表中的新尾码,否则是原尾码。另外,一个物料它如果经过多次变更的话,找它最近的那一次变更,如果没有变更,那么它保持原来的物料表中的编码。
  • 打赏
  • 举报
回复
云中客 2006-04-19
有几个问题:
1.尾码在编码表的作用是什么
2.尾码在尾码变更表中如何判断是否变更
3.各表之间的关系再说明些
  • 打赏
  • 举报
回复
yingming77 2006-04-19
物料表中存储着一些物料的信息,其中有一列物料编码是唯一的,有一项是尾码,
明细表中存储着某种机型对应的物料,以及该物料在该机型上的属性,比如数量等
其中有一列是机型,一列是物料编码,通过物料编码与物料表联系
尾码变更表中存储着某种物料的尾码变更情况,通过物料编码,机型,与物料表及明细表连接
产品表中存储着产品编号,以及产品所属机型,它通过机型与明细表连接,
  • 打赏
  • 举报
回复
itblog 2006-04-19
先说一下你这几个表里都是通过什么进行关联的~
  • 打赏
  • 举报
回复
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

*/
  • 打赏
  • 举报
回复
xiaoku 2006-04-19
是这样吗?

select *,IsNull(d.新尾码,c.尾码) as 尾码
from 产品表 a
Join 明细 b on a.机型 = b.机型
join 物料 c on b.物料编号=c.物料编号
Left Join 尾码变更表 d on a.机型 = d.机型 and c.物料编号>d.改变时的产品编号
  • 打赏
  • 举报
回复
yingming77 2006-04-19
明细:
-------------
机型 物料编码 所属装配 数量
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
而且在0606003以后的所有产品的BJ00001物料的尾码都为b,直到再次更改
  • 打赏
  • 举报
回复
yingming77 2006-04-19
产品表:
----------------
产品编码 机型
0606001 EBZ100
0606002 EBZ100
0606003 EBZ200
-----------------

物料:
-----------------
物料编码 名称 规格 尾码
BJ000001 螺栓 M12*20 a
BJ000002 螺栓 M12*21 a
------------------------------
明细:
-------------
机型 物料编码 所属装配 数量
EBZ100 BJ000001 EBZ100.1.1 20
EBZ100 BJ000001 EBZ100.1.1 20
EBZ200 BJ000002 EBZ200.1.2 10
EBZ200 BJ000002 EBZ200.1.2 10
-------------------------------------
尾码变更表
------------------
物料编码 机型 原尾码 新尾码 改变时的产品编号
BJ00001 EBZ100 a b 0606003
BJ00002 EBZ100 a b 0606003
----------------------------------


希望在查询0606003产品的时候,对应的BJ00001尾码为b
而在查询0606001产品时,对应的BJ00001尾码为a


  • 打赏
  • 举报
回复
相关推荐
发帖
应用实例
加入

2.7w+

社区成员

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