Как пройтись по таблице, выполнить поиск по этим данным, а затем вернуть критерии поиска и результат в новую таблицу? - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть набор записей, которые необходимо проверить (найти) в таблице SQL. Я назову эти ValData и SearchTable соответственно. Коллега создал запрос SQL, в котором запись из ValData может быть скопирована и вставлена ​​в строковую переменную, а затем найдена в SearchTable. Лучший результат из SearchTable возвращается. Это работает очень хорошо.

Я хочу автоматизировать этот процесс. Я загрузил ValData в SQL в виде таблицы: RowID INT, FirstName, LastName, DOB, Date1, Date2, TextDescription.

Я хочу просмотреть этот набор данных по RowID, а затем создатьтаблица результатов, представляющая собой ValData, объединенную с лучшим соответствием из таблицы поиска. Опять же, у меня уже есть запрос, который выполняет эту часть. Мне просто нужна часть цикла, и мои навыки SQL практически отсутствуют.

Код Suedo будет:

DECLARE @SearchID INT = 1
DECLARE @MaxSearchID INT = 15000
DECLARE @FName VARCHAR(50) = ''
DECLARE @FName VARCHAR(50) = ''
etc...

WHILE @SearchID <= @MaxSearchID
BEGIN
   SET @FNAME = (SELECT [Fname] FROM ValData WHERE [RowID] = @SearchID)
   SET @LNAME = (SELECT [Lname] FROM ValData WHERE [RowID] = @SearchID)
   etc...

   Do colleague's query, and then insert(?) search criteria joined with the result from the SearchTable in to a temporary result table.
END

SELECT * FROM FinalResultTable;

Мой самый большой недостаток знаний заключается в том, как мне создать временныйтаблица результатов, которая является полями ValData + поля SearchTable, и как во время итераций цикла как добавить одну строку за раз в эту временную таблицу результатов, которая включает ValData, объединенную с результатом из SearchTable?

Если это поможетЯ использую / хочу объединить все поля из ValData и все поля из SearchTable.

Ответы [ 2 ]

1 голос
/ 01 ноября 2019

Разве это не было бы намного проще с запросом, подобным этому?

0 голосов
/ 08 ноября 2019

С еще большим количеством проб и ошибок я смог ответить на то, что искал (что по своей сути создавало временную таблицу, а затем вставлял в нее строки).

CREATE TABLE #RESULTTABLE(
[feedname] VARCHAR(100),
...
[SCORE] INT,
[Max Score] INT,
[% Score] FLOAT(4),
[RowID] SMALLINT
)

SET @SearchID = 1
SET @MaxSearchID = (SELECT MAX([RowID]) FROM ValidationData

WHILE @SearchID <= @MaxSearchID
BEGIN

SET @FNAME = (SELECT [Fname] FROM ValidationData WHERE [RowID] = @SearchID)
...

--BEST MATCH QUERY HERE

--Select the "top" best match (order not guaranteed) in to the RESULTTABLE.
INSERT INTO #RESULTTABLE
SELECT TOP 1 *, @SearchID AS RowID
--INTO #RESULTTABLE 
FROM #TABLE3
WHERE [% Score] IN (SELECT MAX([% Score]) FROM #TABLE3)

--Drop temp tables that were created/used during best match query.
DROP TABLE #TABLE1
DROP TABLE #TABLE2
DROP TABLE #TABLE3

SET @SearchID = @SearchID + 1

END;

--Join the data that was validated (searched) to the results that were found.
SELECT *
FROM ValidationData vd
LEFT JOIN #RESULTTABLE rt ON rt.[RowID] = vd.[RowID]
ORDER BY vd.[RowID]

DROP TABLE #RESULTTABLE

Я знаю, что это можно подтвердить, выполнив объединение, возможно, с помощью "BEST MATCH QUERY" в качестве внутреннего запроса. Я просто еще не настолько квалифицирован. Это занимает ручной процесс, который занимает часы за часами и сокращает его до часа или около того.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...