基于指定规则使用SQL SELECT语句合并多表的技术需求
编写SQL SELECT语句合并数据库表
源表信息
工厂表(Plant)
| 编号(ID) | 标识(identifier) | 编码(code) |
|---|---|---|
| cbf2 | 5200 | consistent |
| b3aa | 5201 | consistent |
供应商表(Supplier)
| 编号(ID) | 标识(identifier) | 编码(code) |
|---|---|---|
| 3527 | SD501 | consistent |
物料表(Material)
| 编号(ID) | 标识(identifier) | 编码(code) | PC编号(PC_ID) | wxyz编码(wxyz_Code) |
|---|---|---|---|---|
| b4a1 | B50003 | consistent | a | 1 |
| 97bb | B50004 | consistent | b | 1 |
| e189 | B50005 | consistent | c | 0 |
合并规则
- 派生表(DerivedTable)的
格式化编号(formattedID)列由工厂表、物料表、供应商表的标识(identifier)列组合而成。 - 仅选取物料表中
wxyz编码(wxyz_Code) = 1的行。 - 物料表的
wxyz编码(wxyz_Code)列在派生表中重命名为abcd编码(abcd_Code)。 - 派生表的
物料编号(Material_ID)、工厂编号(Plant_ID)、供应商编号(Supplier_ID)列分别取自物料表、工厂表、供应商表的编号(ID)列。 - 派生表的
PC编号(PC_ID)列取自物料表的PC编号(PC_ID)列。
期望生成的派生表(DerivedTable)
| 编号(ID) | 格式化编号(formattedID) | abcd编码(abcd_Code) | 物料编号(Material_ID) | 供应商编号(Supplier_ID) | 工厂编号(Plant_ID) | PC编号(PC_ID) |
|---|---|---|---|---|---|---|
| 自动生成 | B50003/5201 | 1 | b4a1 | 'null' | cbf2 | a |
| 自动生成 | B50003/5200 | 1 | b4a1 | 'null' | b3aa | a |
| 自动生成 | B50003/5201/SD501 | 1 | b4a1 | 3527 | cbf2 | a |
| 自动生成 | B50003/5200/SD501 | 1 | b4a1 | 3527 | b3aa | a |
| 自动生成 | B50004/5201 | 1 | 97bb | 'null' | cbf2 | b |
| 自动生成 | B50004/5200 | 1 | 97bb | 'null' | b3aa | b |
| 自动生成 | B50004/5201/SD501 | 1 | 97bb | 3527 | cbf2 | b |
| 自动生成 | B50004/5200/SD501 | 1 | 97bb | 3527 | b3aa | b |
实现SQL语句
-- 注:自动生成ID的函数需根据数据库调整,如MySQL用UUID(),SQL Server用NEWID(),Oracle用SYS_GUID() SELECT UUID() AS ID, CONCAT(m.identifier, '/', p.identifier) AS formattedID, m.wxyz_Code AS abcd_Code, m.ID AS Material_ID, NULL AS Supplier_ID, p.ID AS Plant_ID, m.PC_ID FROM Material m CROSS JOIN Plant p WHERE m.wxyz_Code = 1 UNION ALL SELECT UUID() AS ID, CONCAT(m.identifier, '/', p.identifier, '/', s.identifier) AS formattedID, m.wxyz_Code AS abcd_Code, m.ID AS Material_ID, s.ID AS Supplier_ID, p.ID AS Plant_ID, m.PC_ID FROM Material m CROSS JOIN Plant p CROSS JOIN Supplier s WHERE m.wxyz_Code = 1 ORDER BY Material_ID, Plant_ID, Supplier_ID DESC;
内容的提问来源于stack exchange,提问作者curious_electron
相关产品推荐
相关产品推荐

