简体   繁体   中英

How to search using a delimited string as array in query

I am trying to search for records columns that match a value within a delimited string.

I have two tables that look like this

Vehicles

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

Monitor

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

What I'm trying to achieve is the following:

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

Using the following query I can get matches on singular strings, but I'm not sure how I can split the commas to search for individual models.

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

(I am using a very SQL Server 2016 however I do not have access to create custom functions or variables)

If you are stuck with this data model, you can use 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;

I would advise you to put your efforts into fixing the data model, though.

Here is a db<>fiddle.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM