BOM表去除虚拟件的问题

weixin_41909319 2018-06-13 02:47:29
跟之前有朋友提问过的需求应该是相似的,但是回答的几种解决办法我测试了结果有些不正确
https://bbs.csdn.net/topics/390714141

我要从中间删除一些虚拟件,但是这些虚拟件下面已经包含了一些零件和材料,所以这部分要向上提高层级、合并数量
新手,麻烦大家


SELECT [end2id]--id
,[end1id]--上级id
,[end2basname]--名称
,[macdsscode]--单位
,[quantity]--用量

,[property]--属性,c为正常,v为虚拟件
FROM [dbo].[PLMBOM]




USE [cs管理]
GO
/****** Object: Table [dbo].[PLMBOM] Script Date: 2018/6/13 14:39:21 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[PLMBOM](
[end1id] [varchar](255) NULL,
[end1name] [varchar](255) NULL,
[end1basname] [varchar](255) NULL,
[itemspecification] [varchar](255) NULL,
[macdcode] [varchar](255) NULL,
[end2id] [varchar](255) NULL,
[end2name] [varchar](255) NULL,
[end2basname] [varchar](255) NULL,
[itemspecification2] [varchar](255) NULL,
[macdsscode] [varchar](255) NULL,
[quantity] [varchar](255) NULL,
[sequence] [varchar](255) NULL,
[mainpart] [varchar](255) NULL,
[property] [varchar](255) NULL,
[propertyint] [int] NULL
) ON [PRIMARY]
GO
INSERT [dbo].[PLMBOM] ([end1id], [end1name], [end1basname], [itemspecification], [macdcode], [end2id], [end2name], [end2basname], [itemspecification2], [macdsscode], [quantity], [sequence], [mainpart], [property], [propertyint]) VALUES (N'118000003', N'成品', N'卧式电蒸汽锅炉', N'WDR3.0-1.0-D', N'PCS', N'211000041', N'一级半成品属性', N'锅炉本体', N'一级部件', N'PCS', N'1', N'0010', N'118000003', N'c', 3)
INSERT [dbo].[PLMBOM] ([end1id], [end1name], [end1basname], [itemspecification], [macdcode], [end2id], [end2name], [end2basname], [itemspecification2], [macdsscode], [quantity], [sequence], [mainpart], [property], [propertyint]) VALUES (N'118000003', N'成品', N'卧式电蒸汽锅炉', N'WDR3.0-1.0-D', N'PCS', N'213000025', N'一级半成品属性', N'锅炉底座', N'一级部件', N'PCS', N'1', N'0020', N'118000003', N'v', 4)
INSERT [dbo].[PLMBOM] ([end1id], [end1name], [end1basname], [itemspecification], [macdcode], [end2id], [end2name], [end2basname], [itemspecification2], [macdsscode], [quantity], [sequence], [mainpart], [property], [propertyint]) VALUES (N'118000003', N'成品', N'卧式电蒸汽锅炉', N'WDR3.0-1.0-D', N'PCS', N'217000003', N'一级半成品属性', N'前保温结构', N'一级部件', N'PCS', N'2', N'0030', N'118000003', N'v', 4)
INSERT [dbo].[PLMBOM] ([end1id], [end1name], [end1basname], [itemspecification], [macdcode], [end2id], [end2name], [end2basname], [itemspecification2], [macdsscode], [quantity], [sequence], [mainpart], [property], [propertyint]) VALUES (N'118000003', N'成品', N'卧式电蒸汽锅炉', N'WDR3.0-1.0-D', N'PCS', N'214000027', N'一级半成品属性', N'外包皮', N'一级部件', N'PCS', N'1', N'0040', N'118000003', N'v', 4)
INSERT [dbo].[PLMBOM] ([end1id], [end1name], [end1basname], [itemspecification], [macdcode], [end2id], [end2name], [end2basname], [itemspecification2], [macdsscode], [quantity], [sequence], [mainpart], [property], [propertyint]) VALUES (N'118000003', N'成品', N'卧式电蒸汽锅炉', N'WDR3.0-1.0-D', N'PCS', N'215000015', N'一级半成品属性', N'平台扶梯', N'一级部件', N'PCS', N'1', N'0050', N'118000003', N'v', 4)
INSERT [dbo].[PLMBOM] ([end1id], [end1name], [end1basname], [itemspecification], [macdcode], [end2id], [end2name], [end2basname], [itemspecification2], [macdsscode], [quantity], [sequence], [mainpart], [property], [propertyint]) VALUES (N'118000003', N'成品', N'卧式电蒸汽锅炉', N'WDR3.0-1.0-D', N'PCS', N'311002043', N'非一级半成品属性', N'侧面保温结构', N'一级部件', N'PCS', N'1', N'0060', N'118000003', N'v', 4)
INSERT [dbo].[PLMBOM] ([end1id], [end1name], [end1basname], [itemspecification], [macdcode], [end2id], [end2name], [end2basname], [itemspecification2], [macdsscode], [quantity], [sequence], [mainpart], [property], [propertyint]) VALUES (N'211000041', N'一级半成品属性', N'锅炉本体', N'一级部件', N'PCS', N'311000983', N'非一级半成品属性', N'电热管座', N'组件', N'PCS', N'86', N'0010', N'118000003', N'v', 4)
INSERT [dbo].[PLMBOM] ([end1id], [end1name], [end1basname], [itemspecification], [macdcode], [end2id], [end2name], [end2basname], [itemspecification2], [macdsscode], [quantity], [sequence], [mainpart], [property], [propertyint]) VALUES (N'211000041', N'一级半成品属性', N'锅炉本体', N'一级部件', N'PCS', N'311001922', N'非一级半成品属性', N'管板', N't16', N'PCS', N'2', N'0020', N'118000003', N'c', 3)
INSERT [dbo].[PLMBOM] ([end1id], [end1name], [end1basname], [itemspecification], [macdcode], [end2id], [end2name], [end2basname], [itemspecification2], [macdsscode], [quantity], [sequence], [mainpart], [property], [propertyint]) VALUES (N'211000041', N'一级半成品属性', N'锅炉本体', N'一级部件', N'PCS', N'311001923', N'非一级半成品属性', N'卧式锅壳', N't12', N'PCS', N'1', N'0030', N'118000003', N'c', 3)
INSERT [dbo].[PLMBOM] ([end1id], [end1name], [end1basname], [itemspecification], [macdcode], [end2id], [end2name], [end2basname], [itemspecification2], [macdsscode], [quantity], [sequence], [mainpart], [property], [propertyint]) VALUES (N'211000041', N'一级半成品属性', N'锅炉本体', N'一级部件', N'PCS', N'301013237', N'非一级半成品属性', N'管座DN20', N'20-16', N'PCS', N'2', N'0040', N'118000003', N'v', 4)
INSERT [dbo].[PLMBOM] ([end1id], [end1name], [end1basname], [itemspecification], [macdcode], [end2id], [end2name], [end2basname], [itemspecification2], [macdsscode], [quantity], [sequence], [mainpart], [property], [propertyint]) VALUES (N'211000041', N'一级半成品属性', N'锅炉本体', N'一级部件', N'PCS', N'301013047', N'非一级半成品属性', N'吊耳', N'组件', N'PCS', N'2', N'0050', N'118000003', N'v', 4)
INSERT [dbo].[PLMBOM] ([end1id], [end1name], [end1basname], [itemspecification], [macdcode], [end2id], [end2name], [end2basname], [itemspecification2], [macdsscode], [quantity], [sequence], [mainpart], [property], [propertyint]) VALUES (N'211000041', N'一级半成品属性', N'锅炉本体', N'一级部件', N'PCS', N'301013127', N'非一级半成品属性', N'人孔300x400-1.25(外购)', N'300*400(外购)', N'PCS', N'1', N'0060', N'118000003', N'v', 4)
INSERT [dbo].[PLMBOM] ([end1id], [end1name], [end1basname], [itemspecification], [macdcode], [end2id], [end2name], [end2basname], [itemspecification2], [macdsscode], [quantity], [sequence], [mainpart], [property], [propertyint]) VALUES (N'211000041', N'一级半成品属性', N'锅炉本体', N'一级部件', N'PCS', N'301013244', N'非一级半成品属性', N'管座DN100', N'100-16', N'PCS', N'1', N'0070', N'118000003', N'v', 4)
INSERT [dbo].[PLMBOM] ([end1id], [end1name], [end1basname], [itemspecification], [macdcode], [end2id], [end2name], [end2basname], [itemspecification2], [macdsscode], [quantity], [sequence], [mainpart], [property], [propertyint]) VALUES (N'211000041', N'一级半成品属性', N'锅炉本体', N'一级部件', N'PCS', N'303216690', N'非一级半成品属性', N'汽水分离器', N'', N'PCS', N'1', N'0080', N'118000003', N'c', 3)
INSERT [dbo].[PLMBOM] ([end1id], [end1name], [end1basname], [itemspecification], [macdcode], [end2id], [end2name], [end2basname], [itemspecification2], [macdsscode], [quantity], [sequence], [mainpart], [property], [propertyint]) VALUES (N'211000041', N'一级半成品属性', N'锅炉本体', N'一级部件', N'PCS', N'301013240', N'非一级半成品属性', N'管座DN40', N'40-16', N'PCS', N'3', N'0090', N'118000003', N'v', 4)
INSERT [dbo].[PLMBOM] ([end1id], [end1name], [end1basname], [itemspecification], [macdcode], [end2id], [end2name], [end2basname], [itemspecification2], [macdsscode], [quantity], [sequence], [mainpart], [property], [propertyint]) VALUES (N'211000041', N'一级半成品属性', N'锅炉本体', N'一级部件', N'PCS', N'321000045', N'通用件', N'角撑板', N't16', N'PCS', N'8', N'0100', N'118000003', N'v', 4)
INSERT [dbo].[PLMBOM] ([end1id], [end1name], [end1basname], [itemspecification], [macdcode], [end2id], [end2name], [end2basname], [itemspecification2], [macdsscode], [quantity], [sequence], [mainpart], [property], [propertyint]) VALUES (N'211000041', N'一级半成品属性', N'锅炉本体', N'一级部件', N'PCS', N'311001976', N'非一级半成品属性', N'角撑板', N't16', N'PCS', N'4', N'0110', N'118000003', N'v', 4)
INSERT [dbo].[PLMBOM] ([end1id], [end1name], [end1basname], [itemspecification], [macdcode], [end2id], [end2name], [end2basname], [itemspecification2], [macdsscode], [quantity], [sequence], [mainpart], [property], [propertyint]) VALUES (N'211000041', N'一级半成品属性', N'锅炉本体', N'一级部件', N'PCS', N'311001924', N'非一级半成品属性', N'水位表管座', N'组件', N'PCS', N'2', N'0120', N'118000003', N'v', 4)
GO
...全文
1126 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_41909319 2018-06-15
  • 打赏
  • 举报
回复
引用 9 楼 weixin_39755026 的回复:
看你的截图,好像只是输入单个主件编码进行报表查询。 可以进行存储过程带主件编码参数处理: 按照单个查询全部展开结果到临时表之后,然后把虚拟键部分delete,然后进行提高层级等update操作。最后select临时表。 方法虽然笨了一些,但思路清晰。
嗯,我现在就用笨办法解决的,先列出所有元件的层级,每个层级(从下向上)都判断一次是否虚拟件,如果不是,就采用最接近元件层级的主件id
weixin_41909319 2018-06-14
  • 打赏
  • 举报
回复
最终目的就是让虚拟件在主件和元件中都去掉
weixin_41909319 2018-06-14
  • 打赏
  • 举报
回复


我表达能力比较差,重新截图说明一下
我这个表里,有主件品号和元件品号,有关联关系,元件品号为下级id
比如,主件品名为“锅炉底座”的,下面有个叫“底座拉耳”的元件
同时,“底座拉耳”也是一个主件,下面包含2个元件“拉耳”、“方板”;

现在,“底座拉耳”是一个虚拟件(会有一个标注),所以要在此结构中去除。“锅炉底座”直接跟2行元件:“拉耳”、“方板”;
“底座拉耳”数量为4,将其去掉后,“拉耳”、“方板”的数量也同时乘4

最后的结果是这样
weixin_39755026 2018-06-14
  • 打赏
  • 举报
回复
看你的截图,好像只是输入单个主件编码进行报表查询。 可以进行存储过程带主件编码参数处理: 按照单个查询全部展开结果到临时表之后,然后把虚拟键部分delete,然后进行提高层级等update操作。最后select临时表。 方法虽然笨了一些,但思路清晰。
weixin_41909319 2018-06-13
  • 打赏
  • 举报
回复
引用 5 楼 shinger126 的回复:
;WITH t AS (SELECT end2id,end1id,end2basname,CAST(quantity AS INT) quantity,macdsscode FROM PLMBOM WHERE end2id='211000041' UNION ALL SELECT a.end2id,t.end2id,a.end2basname,CAST(t.quantity AS INT)*CAST(a.quantity AS INT) quantity,a.macdsscode FROM t,PLMBOM a WHERE t.end2id=a.end1id) SELECT t.* FROM t LEFT JOIN PLMBOM b ON t.end2id=b.end1id WHERE b.end1id IS NULL 理论上,这个语句可以查询出某个物料的所有零件和原材料,如果半成品还能分解的话,会一只分解下去,不过你的数据中,半成品下面没有了,就只能分解到这些半成品了
谢谢,不过这里没有对虚设件做处理,而且查询结果有很多重复了
shinger126 2018-06-13
  • 打赏
  • 举报
回复
;WITH t AS (SELECT end2id,end1id,end2basname,CAST(quantity AS INT) quantity,macdsscode FROM PLMBOM WHERE end2id='211000041' UNION ALL SELECT a.end2id,t.end2id,a.end2basname,CAST(t.quantity AS INT)*CAST(a.quantity AS INT) quantity,a.macdsscode FROM t,PLMBOM a WHERE t.end2id=a.end1id) SELECT t.* FROM t LEFT JOIN PLMBOM b ON t.end2id=b.end1id WHERE b.end1id IS NULL 理论上,这个语句可以查询出某个物料的所有零件和原材料,如果半成品还能分解的话,会一只分解下去,不过你的数据中,半成品下面没有了,就只能分解到这些半成品了
weixin_41909319 2018-06-13
  • 打赏
  • 举报
回复
引用 2 楼 shinger126 的回复:
是不是想把虚拟件转化为对应的零件和原材料?
对的
weixin_41909319 2018-06-13
  • 打赏
  • 举报
回复
引用 1 楼 wmxcn2000 的回复:
怎么合并,你这些数据中,要删掉哪些,哪些数量要增加 ? 用 excel 画一下。
怎么上传不了图片,抱歉,我表述不是太清楚,我的需求应该和之前问题楼主是一样的,end1id列就是上级id,property列表示属性(v为虚拟件)
shinger126 2018-06-13
  • 打赏
  • 举报
回复
是不是想把虚拟件转化为对应的零件和原材料?
卖水果的net 版主 2018-06-13
  • 打赏
  • 举报
回复
怎么合并,你这些数据中,要删掉哪些,哪些数量要增加 ? 用 excel 画一下。

34,588

社区成员

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

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