首页 > 解决方案 > 根据从列或另一个表中的搜索返回一个表中的行并将这些行写入第三个表

问题描述

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 是包含我要提取的行的第二个表。

我没有尝试过不完全匹配的尝试和搜索。此时我正试图获得某种精确的输出。

标签: sqlsql-servertsql

解决方案


我看不到你需要光标的地方。您可以使用完整的 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 + '%' 

推荐阅读