возвращение строк из одной таблицы на основе поиска по столбцу или другой таблице и запись строк в третью таблицу - PullRequest
0 голосов
/ 24 января 2020

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 во 2-й базе данных. Возможно, они не должны быть точными совпадениями, или я могу найти первые 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 - вторая таблица, содержащая строки, которые я хочу извлечь.

Я не пытался выполнить попытку поиска с не точным соответствием. Я пытался получить какой-то точный вывод в это время.

Ответы [ 2 ]

1 голос
/ 24 января 2020

Я не вижу, где вам нужен курсор. Вы можете объединить обе таблицы в один SELECT, используя полный путь из трех частей, а затем go прямо в вашу таблицу. Для сопоставления, когда номер детали начинается с того же номера детали в родительской таблице, используйте символ «подобно» с подстановочным знаком.

Что-то вроде этих строк:

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 + '%' 
0 голосов
/ 29 января 2020

Вам нужно будет сделать UNION, чтобы сначала получить точные совпадения, а затем добавить не совпадающие, которые следуют шаблону, который вам нужен. Вот основная идея c. Вам нужно будет поменять СОЕДИНЕНИЕ, которое я выделил здесь. Исправлена ​​ли часть «NO2-XXXX», и после этого у вас есть варианты?

Мне нужно больше узнать о точной последовательности номеров деталей, чтобы дать вам точное SQL, но это должно приблизить вас.

SELECT
    PartList.PartNumber
FROM 
    ImportCSV PartList
INNER JOIN
    ItemMaster ON ItemMaster.PartNumber = PartList.PartNumber  

UNION ALL

SELECT
    ItemMaster.PartNumber
FROM 
    ImportCSV PartList
-- THIS SHOULD CHANGE BASED ON YOUR PART NUMBER SEQUENCE
INNER JOIN
    ItemMaster ON LEFT(ItemMaster.PartNumber,8) = LEFT(PartList.PartNumber,8) 
LEFT JOIN
(
    SELECT
        PartList.PartNumber as FoundPartNumber
    FROM 
        ImportCSV PartList
    INNER JOIN
        ItemMaster ON ItemMaster.PartNumber = PartList.PartNumber  

) IT ON IT.FoundPartNumber = PartList.PartNumber
WHERE
    IT.FoundPartNumber IS NULL   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...