Манипулировать строкой для использования в операторе IN (SQL, SSRS) - PullRequest
0 голосов
/ 07 мая 2018

У меня есть отчет SSRS с набором данных, у которого запрос выглядит так (упрощенно, поскольку запрос намного сложнее этого):

select * 
from myTable 
where country in (@Country)

@Country является параметром и может иметь несколько значений

Работает нормально, но нас попросили свернуть все значения из одной страны в другую (страны нет в списке параметров, которые нужно выбрать).

Так, например, нам нужно свернуть все записи, которые принадлежат Канаде, в США, если США были выбраны в качестве одной из стран, по сути, просто заменив «Канада» на «США» в возвращенном наборе данных, чего легко достичь с помощью REPLACE или даже заявление CASE. Однако с предложением WHERE в запросе это немного усложняется. Кто-нибудь знает, как заменить строку другой строкой, чтобы ее понимал оператор IN?

Если я просто сделаю что-то вроде этого:

select * 
from myTable 
where country in (replace(@Country, 'US', 'US,Canada'))

запрос ничего не возвращает, и я понимаю причины этого.

Если я проверю это жесткое кодирование значений, как это:

select * 
from myTable 
where country in ('US', 'Canada')

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

ТИА, -TS.

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Вы можете использовать Dynamic SQL для достижения этой цели.Все, что вам нужно сделать, это передать название страны в объявлении в первой строке.

Посмотрите на код ниже:

DECLARE @SQL NVARCHAR(2000), @Country VARCHAR(30) = 'Canada'

SELECT @SQL = CONCAT('
    select 
        * 
    from myTable 
    where country in (', 
    CASE WHEN @Country = 'US' THEN '''US'', ''Canada''' else '@Country' end , ')'
)

EXEC sp_executesql @SQL, N'@Country VARCHAR(30)', @Country = @Country

Вот скрипка: http://sqlfiddle.com/#!18/b7f49/4

0 голосов
/ 07 мая 2018

Возможно, тот же ответ, что и SQL в (@Variable) запросе

Возможно, вам потребуется добавить REPLACE к этой функции в соответствии с вашими требованиями.

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