我正在“材料”表中创建一个“bom”列表条目。
我将为产品组定义的材料带到网格中,以便用户不会忘记相关材料。
用户通过此模板定义。
但如果他们愿意,他们会添加额外的材料(组模板除外)。
如果第二条select语句中有记录;我不想在 1 条选择语句中显示记录。
我从 lvl 列中了解到,该记录应该在第二个 select 子句中被粉碎。(已对编号为 2 的模板进行了定义)
CREATE TABLE [dbo].[materials](
[id] [int] IDENTITY(1,1) NOT NULL,
[productCode] [varchar](50) NULL,
[description] [varchar](250) NULL,
[usageQauntity] [float] NULL,
[process] [varchar](50) NULL,
[vendor] [varchar](50) NULL,
[lvl] [int] NULL,
CONSTRAINT [PK_materials] PRIMARY KEY CLUSTERED
(
[id] ASC
) ON [PRIMARY]
) ON [PRIMARY]
CREATE TABLE [dbo].[product](
[id] [int] IDENTITY(1,1) NOT NULL,
[code] [varchar](50) NULL,
[name] [varchar](250) NULL,
[groupCode] [varchar](50) NULL,
[unit] [varchar](10) NULL,
[price] [float] NULL,
[minStock] [int] NULL,
[maxStock] [int] NULL,
CONSTRAINT [PK_product] PRIMARY KEY CLUSTERED
(
[id] ASC
) ON [PRIMARY]
) ON [PRIMARY]
SET IDENTITY_INSERT [dbo].[materials] ON
INSERT [dbo].[materials] ([id], [productCode], [description], [usageQauntity], [process], [vendor], [lvl]) VALUES (1, N'pencil', N'paint chemical', 0.15, N'1', N'ABC', 1)
INSERT [dbo].[materials] ([id], [productCode], [description], [usageQauntity], [process], [vendor], [lvl]) VALUES (2, N'pencil', N'pen inside', 1, N'1', N'DEF', 2)
INSERT [dbo].[materials] ([id], [productCode], [description], [usageQauntity], [process], [vendor], [lvl]) VALUES (4, N'pencil', N'cover', 1, N'2', N'GHD', 3)
INSERT [dbo].[materials] ([id], [productCode], [description], [usageQauntity], [process], [vendor], [lvl]) VALUES (5, N'pencil', N'brand label', 1, N'0', N'ABC', 4)
INSERT [dbo].[materials] ([id], [productCode], [description], [usageQauntity], [process], [vendor], [lvl]) VALUES (6, N'lp', N'top eraser', 1, N'0', N'', 0)
INSERT [dbo].[materials] ([id], [productCode], [description], [usageQauntity], [process], [vendor], [lvl]) VALUES (7, N'lp', N'DEF brand pencil inside', 1, N'1', N'DEF', 2)
INSERT [dbo].[materials] ([id], [productCode], [description], [usageQauntity], [process], [vendor], [lvl]) VALUES (8, N'eraser', N'chemical', 1, N'0', N'ABC', 4)
INSERT [dbo].[materials] ([id], [productCode], [description], [usageQauntity], [process], [vendor], [lvl]) VALUES (9, N'eraser', N'brand label', 1, N'0', N'ABC', 4)
SET IDENTITY_INSERT [dbo].[materials] OFF
SET IDENTITY_INSERT [dbo].[product] ON
INSERT [dbo].[product] ([id], [code], [name], [groupCode], [unit], [price], [minStock], [maxStock]) VALUES (1, N'lp', N'lead pencil', N'pencil', N'piece', 15, 1000, 2000)
INSERT [dbo].[product] ([id], [code], [name], [groupCode], [unit], [price], [minStock], [maxStock]) VALUES (2, N'bp', N'ball-point pen', N'pencil', N'piece', 25, 2000, 3000)
INSERT [dbo].[product] ([id], [code], [name], [groupCode], [unit], [price], [minStock], [maxStock]) VALUES (3, N'sp', N'stylographic pen', N'pencil', N'piece', 50, 1000, 2000)
INSERT [dbo].[product] ([id], [code], [name], [groupCode], [unit], [price], [minStock], [maxStock]) VALUES (4, N'me', N'Magnetic eraser', N'eraser', N'piece', 30, 1000, 1500)
INSERT [dbo].[product] ([id], [code], [name], [groupCode], [unit], [price], [minStock], [maxStock]) VALUES (5, N'se', N'Soft Eraser', N'eraser', N'piece', 20, 1000, 2000)
SET IDENTITY_INSERT [dbo].[product] OFF
13 rows affected
select * from product
select * from materials
ID | 代码 | 姓名 | 组码 | 单元 | 价格 | 最小库存 | 最大库存 |
---|---|---|---|---|---|---|---|
1 | LP | 铅笔 | 铅笔 | 片 | 15 | 1000 | 2000 |
2 | bp | 圆珠笔 | 铅笔 | 片 | 25 | 2000 | 3000 |
3 | sp | 字体笔 | 铅笔 | 片 | 50 | 1000 | 2000 |
4 | 我 | 磁性橡皮擦 | 橡皮 | 片 | 30 | 1000 | 1500 |
5 | 瑟 | 软橡皮擦 | 橡皮 | 片 | 20 | 1000 | 2000 |
ID | 产品代码 | 描述 | 使用数量 | 过程 | 小贩 | 等级 |
---|---|---|---|---|---|---|
1 | 铅笔 | 油漆化学品 | 0.15 | 1 | 美国广播公司 | 1 |
2 | 铅笔 | 笔在里面 | 1 | 1 | 国防军 | 2 |
4 | 铅笔 | 覆盖 | 1 | 2 | 生长激素 | 3 |
5 | 铅笔 | 品牌标签 | 1 | 0 | 美国广播公司 | 4 |
6 | LP | 顶部橡皮擦 | 1 | 0 | 0 | |
7 | LP | 内有 DEF 品牌铅笔 | 1 | 1 | 国防军 | 2 |
8 | 橡皮 | 化学 | 1 | 0 | 美国广播公司 | 4 |
9 | 橡皮 | 品牌标签 | 1 | 0 | 美国广播公司 | 4 |
select p.id,p.code,m2.*
from product p
left join materials m2 on m2.productCode=p.groupCode
where p.code='lp'
select p.id,p.code,m1.*
from product p
left join materials m1 on m1.productCode=p.code
where p.code='lp'
ID | 代码 | ID | 产品代码 | 描述 | 使用数量 | 过程 | 小贩 | 等级 |
---|---|---|---|---|---|---|---|---|
1 | LP | 1 | 铅笔 | 油漆化学品 | 0.15 | 1 | 美国广播公司 | 1 |
1 | LP | 2 | 铅笔 | 笔在里面 | 1 | 1 | 国防军 | 2 |
1 | LP | 4 | 铅笔 | 覆盖 | 1 | 2 | 生长激素 | 3 |
1 | LP | 5 | 铅笔 | 品牌标签 | 1 | 0 | 美国广播公司 | 4 |
ID | 代码 | ID | 产品代码 | 描述 | 使用数量 | 过程 | 小贩 | 等级 |
---|---|---|---|---|---|---|---|---|
1 | LP | 6 | LP | 顶部橡皮擦 | 1 | 0 | 0 | |
1 | LP | 7 | LP | 内有 DEF 品牌铅笔 | 1 | 1 | 国防军 | 2 |
--test: Since lvl=2 is defined in the product, materials.id=2 should not appear.
select p.id,p.code,m1.*
from product p
left join materials m1 on (m1.productCode=p.code or m1.productCode=p.groupCode)
where p.code='lp'
ID | 代码 | ID | 产品代码 | 描述 | 使用数量 | 过程 | 小贩 | 等级 |
---|---|---|---|---|---|---|---|---|
1 | LP | 1 | 铅笔 | 油漆化学品 | 0.15 | 1 | 美国广播公司 | 1 |
1 | LP | 2 | 铅笔 | 笔在里面 | 1 | 1 | 国防军 | 2 |
1 | LP | 4 | 铅笔 | 覆盖 | 1 | 2 | 生长激素 | 3 |
1 | LP | 5 | 铅笔 | 品牌标签 | 1 | 0 | 美国广播公司 | 4 |
1 | LP | 6 | LP | 顶部橡皮擦 | 1 | 0 | 0 | |
1 | LP | 7 | LP | 内有 DEF 品牌铅笔 | 1 | 1 | 国防军 | 2 |
https://dbfiddle.uk/KqDsDnko