Как использовать фильтры в другой таблице в SQL Server - PullRequest
0 голосов
/ 03 мая 2019

У меня есть таблица для Product:

╔═══════════╦═════════════╦══════════════╗
║ ProjectID ║ ProductName ║ Manufacturer ║
╠═══════════╬═════════════╬══════════════╣
║ 1         ║ ABC         ║ A            ║
╠═══════════╬═════════════╬══════════════╣
║ 1         ║ XYZ         ║ B            ║
╠═══════════╬═════════════╬══════════════╣
║ 2         ║ LMN         ║ C            ║
╚═══════════╩═════════════╩══════════════╝

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

select * from ProductMaster
where (Manufacturer like '%A%' or
       Manufacturer like '%B%' or
       Manufacturer like '%C%')
  and project_id=1

Но теперь производитель увеличился (az).и я хочу использовать его динамически.Я имею в виду, я не хочу использовать фильтры вручную.Я хочу сохранить эти фильтры в другой таблице, и я могу получить эти записи с помощью процедуры.Может ли кто-нибудь помочь мне в этом.

Я создал таблицу для Списка производителей (Фильтры).

╔═══════════╦═════════╗
║ ProjectID ║ Filters ║
╠═══════════╬═════════╣
║ 1         ║ A       ║
╠═══════════╬═════════╣
║ 1         ║ B       ║
╠═══════════╬═════════╣
║ 2         ║ A       ║
╚═══════════╩═════════╝

Примечание. Фильтры различны для различных проектов.

Ответы [ 3 ]

2 голосов
/ 03 мая 2019

Присоединитесь к таблице фильтра в столбце производителя и присоединитесь к ней на LIKE '%filter%', используя CONCAT().

SELECT pm.* 
FROM ProductMaster AS pm
JOIN Filters AS f
    ON pm.ProjectID = f.ProjectID AND pm.Manufacturer LIKE CONCAT('%', f.Filters, '%')
WHERE pm.project_id=1
1 голос
/ 03 мая 2019

Полагаю, это так же просто, как:

SELECT * 
FROM ProductMaster
WHERE ProjectID = 1
AND EXISTS (
    SELECT 1
    FROM Filters
    WHERE Filters.ProjectID = ProductMaster.ProjectID
    AND ProductMaster.Manufacturer LIKE '%' + Filters.Filter '%'
)
0 голосов
/ 03 мая 2019

Нечто подобное заставит вас идти.

Объявленная таблица принимает серию проэктов и некоторые символы для фильтра. Затем этот запрос можно перекрестно применить с помощью charindex, чтобы найти совпадение в соответствующем проекте с производителем, таким как фильтр, который вы ищете.

declare @filters table

(
    ProjectID int, 
    Filters nvarchar(5)
);

insert @filters (ProjectID, Filters)
(1, 'A'),
(1, 'B'),
(1, 'C');

select p.* from ProductMaster p
cross apply (select f.projectid, filters from @filters f where where p.projectid=f.projectid and charindex(f.filters,p.Manufacturer,1)>0) x
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...