Как сопоставить данные в одном столбце на основе данных из двух или более столбцов - PullRequest
0 голосов
/ 13 марта 2020

У меня возникли некоторые проблемы при попытке сделать это, поэтому, если кто-то может указать мне правильное направление, это будет очень цениться.

Так что данные в файле Excel выглядят так:

Work Title   | Composers/Authors
------------------------------------------------------------------------------------
ACIDS ROCKS  | BARLOW/FOSTER
ABOVE CLOUDS | JEFF BECK,CYNDI LAUPER,JED LEIBER

и данные в БД похожи, поскольку у авторов также могут быть полные имена или фамилии, но они разделены.

Теперь я хотел бы сопоставить эти данные с данными в БД, которая, например, выглядит следующим образом:

Work Title   | Composers/Authors
------------------------------------------------------------------------------------
ACIDS ROCKS  | DARREN JAMES BARLOW
ACIDS ROCKS  | FOSTER

В этих ситуациях желаемым результатом будет совпадение этих двух произведений (возвращаемое значение может быть идентификатором, привязанным к заголовку в БД), но если работа, например, не содержит записи с «FOSTER», то эти две работы не должны совпадать.

Названия должны совпадать на 100% (поэтому, если, например, заголовок - THE ACIDS ROCKS, он не будет не совпадают), и авторы должны содержать только фамилию, или, вероятно, было бы довольно сложно точно сопоставить их на основе предоставленных данных.

Надеюсь, что это прояснит.

РЕДАКТИРОВАТЬ :

Еще раз посмотрев данные и попробовав скомпилировать их так, чтобы было проще, теперь они должны выглядеть следующим образом:

Данные в БД

Work Title   | Composers/Authors
------------------------------------------------------------------------------------
ACIDS ROCKS  | DARREN JAMES BARLOW
ACIDS ROCKS  | FOSTER

Данные в таблице Excel

Work Title   | Composers/Authors
------------------------------------------------------------------------------------
ACIDS ROCKS  | FOSTER
ACIDS ROCKS  | DARREN JAMES BARLOW

Таким образом, чтобы упростить задачу, мне нужно, чтобы данные были на 100% одинаковыми, поэтому, если заголовок соответствует (в данном случае ACIDS ROCKS), тогда запрос должен проверить, если авторы то же самое (в этом случае они, но не в том же порядке). У меня проблемы с проверкой каждой строки в отдельности. В данном случае желаемым результатом будет совпадение работ, поскольку они имеют одинаковый заголовок и авторов, но если, например, данные БД будут выглядеть как

Work Title   | Composers/Authors
------------------------------------------------------------------------------------
ACIDS ROCKS  | DARREN JAMES BARLOW
ACIDS ROCKS  | MARK FOSTER

, то они не должны совпадать. Даже если FOSTER отсутствует или у нас есть дополнительный автор в БД, он не должен совпадать (не уверен, насколько сложно это ограничить)

1 Ответ

0 голосов
/ 13 марта 2020

Запустите следующее как есть, если ваш Db2 предназначен для Linux, Unix и Windows.
Вы можете раскомментировать закомментированную строку и закомментировать строку над ней, чтобы проверить разницу.

WITH 
  EXCEL_TABLE (Title, Author) AS
(
VALUES
  ('ACIDS ROCKS', 'FOSTER')
, ('ACIDS ROCKS', 'DARREN JAMES BARLOW')
)
, DB_TABLE (Title, Author) AS
(
VALUES
  ('ACIDS ROCKS', 'DARREN JAMES BARLOW')
, ('ACIDS ROCKS', 'FOSTER')
--, ('ACIDS ROCKS', 'MARK FOSTER')
)
SELECT E.Title, E.Authors
FROM
(
SELECT Title, LISTAGG(Author, ',') WITHIN GROUP (ORDER BY Author) AS Authors
FROM EXCEL_TABLE
GROUP BY Title
) E
JOIN 
(
SELECT Title, LISTAGG(Author, ',') WITHIN GROUP (ORDER BY Author) AS Authors
FROM DB_TABLE
GROUP BY Title
) D ON D.Title = E.Title AND D.Authors = E.Authors;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...