Использование оператора IN для запроса в SSRS - PullRequest
0 голосов
/ 11 декабря 2018

В создаваемом отчете по SSRS у меня есть запрос, подобный приведенному ниже:

SELECT ID, Name
FROM TableA
WHERE Name IN (@name)

А затем в SSRS у меня есть доступные значения параметра, равные 'Получить значения из запроса'и поле Значение будет выглядеть примерно так:

'A','B','C'
'D','E','F'
'G','H','I'

А поле Метка будет выглядеть примерно так:

Label A
Label B
Label C

Когда я запускаю запрос

SELECT ID, Name
FROM TableA,
WHERE Name IN ('A','B','C')

Правильные результаты возвращаются в SQL Management Studio, однако отчет ничего не возвращает.Как получить правильно отформатированное значение в операторе IN?

1 Ответ

0 голосов
/ 11 декабря 2018

Исходя из вашего примера, я бы подошел к этому так ...

Создайте таблицу или представление, которое содержит ваши метки и значения, такие как

myTable:
    myCaption   MyValue
    'Label A'   'A'
    'Label A'   'B'
    'Label A'   'C'
    'Label B'   'D'
    'Label B'   'E'
    'Label B'   'F'
    'Label C'   'G'
    'Label C'   'H'
    'Label C'   'I'

Для вашего первого параметра (@myLabel), набор данных будет просто

SELECT DISTINCT myCaption FROM myTable ORDER BY myCaption

Ваш второй параметр (@myValues) (при условии, что вы хотите, чтобы пользователь мог выбирать из значений) будет

SELECT myValue FROM myTable WHERE myLabel = @myLabel

Вам нужно будет сделать параметр многозначным и установить доступные значения для 2-го набора данных, при желании вы можете установить значения по умолчанию для того же набора данных.

В вашем наборе данных основного отчета запрос будет выглядеть так:ваш пример

SELECT * FROM myDataTable WHERE myColumn IN (@myValues)

Пока вышеприведенное непосредственно относится к запросу набора данных (другими словами, вы не используете хранимую процедуру), тогда это будет работать как положено.SSRS автоматически преобразует ваш многозначный параметр в список, разделенный запятыми, и вставит его в ваш запрос к набору данных, поэтому фактический запрос, отправленный на сервер, будет SELECT * FROM myDataTable WHERE myColumn IN ('A', 'B', 'C')

...