sql - 根据从列或另一个表中的搜索返回一个表中的行并将这些行写入第三个表
问题描述
SELECT
PartList.cprj,
PartList.PartNumber,
PartList.SWITEM,
PartList.QTY,
ItemMaster.dsca,
ItemMaster.item
FROM
SSIS.dbo.SWBOM as PartList
INNER JOIN
ItemMasterRoutingPOC.dbo.[Item Master Data] AS ItemMaster ON ItemMaster.item = PartList.PartNumber
UNION ALL
SELECT
PartList.cprj,
PartList.PartNumber,
PartList.SWITEM,
PartList.QTY,
ItemMaster.dsca,
ItemMaster.item
FROM
SWBOM PartList
THIS SHOULD CHANGE BASED ON YOUR PART NUMBER SEQUENCE
INNER JOIN
ItemMasterRoutingPOC.dbo.[Item Master Data] AS ItemMaster ON ItemMaster.item =
(CASE WHEN (ItemMaster.item=LEFT(ItemMaster.item,8) + '-XX') AND (ItemMaster.item=LEFT(ItemMaster.item,8) + '-X')
THEN (LEFT(PartList.PartNumber,8) + '-XX')
ELSE
(LEFT(PartList.PartNumber,8) + '-X')
END)
LEFT JOIN
( SELECT
PartList.PartNumber as FoundPartNumber
FROM
SWBOM PartList
INNER JOIN
ItemMasterRoutingPOC.dbo.[Item Master Data] AS ItemMaster ON ItemMaster.item = PartList.PartNumber
) IT ON IT.FoundPartNumber = PartList.PartNumber
WHERE
IT.FoundPartNumber IS NULL
我是这个编程的新手。我在两个不同的数据库中有 2 个表。在一个表中,我有一个 PartNumber 列,其中包含许多我想在不同数据库的另一个表中交叉引用的数字。因此,对于 PartNumber 列中的每个条目(通过它们循环),我想匹配第二个数据库上的 PartNumber 列。它们可能不必完全匹配,或者我可以搜索前 8 个字符。因此,对于每个 PartNumber 搜索,我希望将第二个表中的所有行插入到与第一个表位于同一数据库中的第三个表中。
我曾尝试编写一些代码,但以我有限的知识现在非常成功。代码是这样的:
IF OBJECT_ID('FFGD.dbo.BAANExport') IS NOT NULL
DROP TABLE FFGD.dbo.BAANExport
GO
CREATE TABLE FFGD.dbo.BAANExport
(
ITEM VARCHAR(512),
PartNumber VARCHAR(512),
QTY VARCHAR(512),
dsca VARCHAR(512),
Level VARCHAR(512),
trid VARCHAR(512),
cprj VARCHAR(512),
mitm VARCHAR(512),
pono VARCHAR(512),
sitm VARCHAR(512),
opol VARCHAR(512),
qana VARCHAR(512),
scpf VARCHAR(512),
cwar VARCHAR(512),
opno VARCHAR(512),
cpha VARCHAR(512),
exin VARCHAR(512),
itlu VARCHAR(512),
ssta VARCHAR(512),
)
GO
DECLARE PartNumber_cursor CURSOR FOR
SELECT PartNumber
FROM FFGD.dbo.ImportCSV;
OPEN PartNumber_cursor;
FETCH NEXT FROM PartNumber_cursor;
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM PartNumber_cursor;
Insert into FFGD.dbo.BAANExport
Select * from BAANItems.dbo.ItemMaster, FFGD.dbo.ImportCSV
where BAANItems.dbo.ItemMaster.PartNumber = BAANItems.dbo.ItemMaster.PartNumber
END;
CLOSE PartNumber_cursor;
DEALLOCATE PartNumber_cursor;
GO
BAANEXport 是要写入的第三个表。ImportCSV 是第一个表,其中包含我想在第二个表中找到的部件号。ItemMaster 是包含我要提取的行的第二个表。
我没有尝试过不完全匹配的尝试和搜索。此时我正试图获得某种精确的输出。
解决方案
我看不到你需要光标的地方。您可以使用完整的 3 部分路径在一个 SELECT 中连接两个表,然后直接进入您的表。要进行零件编号以父表中的相同零件编号开头的匹配,请使用带通配符的like。
这些方面的东西:
Insert into FFGD.dbo.BAANExport
(PartNumber)
SELECT
PartList.PartNumber
FROM
FFGD.dbo.ImportCSV PartList
INNER JOIN
BAANItems.dbo.ItemMaster ItemMaster ON PartList.PartNumber LIKE BAANItems.dbo.ItemMaster.PartNumber + '%'
推荐阅读
- javascript - 我想在本机反应中获取数据到文本
- reactjs - 使用 Typescript 的 React 组件的数据类型
- android - 为什么 xml drawable 在 Android Studio 中看起来与手机不同?
- javascript - YouTube 如何启动一个未静音的视频,跳过关于未静音视频的 JavaScript 限制?
- python - django.db.utils.IntegrityError:唯一约束失败:
- mongodb - 如何使用聚合 MongoDB 查找具有两列的不同字段
- powershell - Powershell从特定的WLAN获取接口
- html - 删除标题空间的 div 边框元素
- asynchronous - 如何在reactphp中检索外部响应变量
- cassandra - 星际之门是否适用于物化视图?