2015-04-23 2 views
0

У меня есть отчет, в котором я пытаюсь разрешить пользователю выбирать несколько предопределенных значений LIKE из выпадающего списка для своих результатов в построителе отчетов. Есть ли способ, которым я могу это сделать? Я попытался использовать LIKE IN(), но эти два ключевых слова, похоже, не работают вместе. Вот код, который у меня есть. Код, который я использую только, если я выбираю один вариант.SQL Server Выбор нескольких значений LIKE в построителе отчетов

DECLARE @Warehouse nvarchar(10) 
DECLARE @Location nvarchar(10) 
SET @Warehouse = 'Warehouse1' 
SET @Location = 'IB' 

SELECT Part 
, Tag 
, CurrentLocation AS 'Location' 
, TotalQty 
, DateTimeCreated 
, datediff(hour, DateTimeCreated, getdate()) AS 'Hours in Location' 
, User AS 'Last User' 
FROM table1 
WHERE datediff(hour, DateTimeCreated, getdate())>=1 
AND Warehouse IN(@Warehouse) 
AND(CurrentLocation LIKE '%' + @Location + '%') 
ORDER BY 'Hours in Location' DESC, CurrentLocation 

ответ

0

Благодарим за ответы. Это то, что я закончил тем, что исправил мою проблему.

SELECT Part 
, Tag 
, CurrentLocation AS 'Location' 
, TotalQty 
, DateTimeCreated 
, datediff(hour, DateTimeCreated, getdate()) AS 'Hours in Location' 
, User AS 'Last User' 
FROM table 1 
WHERE datediff(hour, DateTimeCreated, getdate())>=1 
AND Warehouse in (@Warehouse) 
AND LEFT(CurrentLocation,2) IN(@Location) 
ORDER BY 'Hours in Location' DESC, CurrentLocation 
1

Это было бы лучше всего обработать с помощью хранимой процедуры. Вот высокоуровневое описание того, как это будет работать. Каждый из методов может быть изучен на низком уровне с некоторым проницательным поиском:

Для вашего набора данных отчета вызовите хранимую процедуру, передайте свой многозначный параметр параметру varchar в сохраненном proc. Для остальной части этого ответа мы назовем этот параметр @MVList

В сохраненной proc @MVList будет приниматься как строка с разделителями-запятыми всех параметров, которые пользователь выбрал в списке параметров.

Напишите свой запрос SELECT из Таблицы 1, ПРИСОЕДИНИТЕСЬ к Таблично-значной функции, которая разбивает @MVList (функция разделения SQL Google для получения предварительно написанного кода) и создает таблицу с одной строкой для каждого значения, которое пользователь выбрал ,

условие объединения, а не равными, сделать LIKE:

INNER JOIN MySplitFunction(@MVList, ',') AS SplitFunction 
ON Table1.CurrentLocation LIKE '%'+SplitFunction.value+'%' 

Результат запроса будет IN/LIKE результат вы ищете.

Смежные вопросы