Как искать с использованием строки с разделителями в виде массива в запросе - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь найти столбцы записей, которые соответствуют значению в строке с разделителями.

У меня есть две таблицы, которые выглядят так

Транспортные средства

| Id | Make | Model |
|----|------|-------|
| 1  | Ford | Focus |
| 2  | Ford | GT    |
| 3  | Ford | Kuga  |
| 4  | Audi | R8    |

Монитор

| Id | Makes | Models   |
|----|-------|----------|
| 1  | Ford  | GT,Focus |
| 2  | Audi  | R8       |

Я пытаюсь достичь следующего:

| Id | Makes | Models   | Matched_Count |
|----|-------|----------|---------------|
| 2  | Audi  | R8       | 1             |
| 1  | Ford  | GT,Focus | 2             |

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

select Id, Makes, Models, (select count(id) from Vehicles va where UPPER(sa.Makes) = UPPER(va.Make) AND UPPER(sa.Models) = UPPER(va.Model)) as Matched_Count
from Monitor sa

(я использую очень SQL Server 2016, однако у меня нет доступа для создания пользовательских функций или переменных)

1 Ответ

0 голосов
/ 06 августа 2020

Если вы застряли с этой моделью данных, вы можете использовать string_split():

select m.*, v.matched_count
from monitor m outer apply
     (select count(*) as matched_count
      from string_split(m.models, ',') s join
           vehicles v
           on s.value = v.model and m.makes = v.makes
     ) v;

Я бы посоветовал вам приложить усилия для исправления модели данных.

Здесь - скрипт db <>.

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