SSRS: есть ли способ передать значения параметра в ключевое слово «Значения» в запросе SQL? - PullRequest
1 голос
/ 05 февраля 2020

Я хотел бы знать правильный метод для передачи значений параметра в ключевое слово VALUES в SQL в базовом наборе данных. Я использую Microsoft Report Builder v3.0, запрашиваю базу данных MS- SQL.

В настоящий момент, после большого количества поиска в Google и переполнения стека, я получил следующую хорошо работающую SQL для того, чтобы найти пациентов с кодами диагностики, начинающимися либо с "AB", либо с "X C":

SELECT
    x.PatientId

FROM
  (
    VALUES
      ('AB%'),
      ('XC%')
  ) AS v (pattern)

  CROSS APPLY

  (
    SELECT 
            p.PatientId, 
            p.LastName

    FROM
            dbo.Patient p
            inner join Course c on (c.PatientSer = p.PatientSer)
            inner join CourseDiagnosis cd on (cd.CourseSer=c.CourseSer)
            inner join Diagnosis diag on (diag.DiagnosisSer=cd.DiagnosisSer)


    WHERE       
            diag.DiagnosisCode like v.pattern
  ) AS x
;

Однако я хочу сделать поиск шаблонов, как сгенерированный по ключевому слову VALUES, которое будет сгенерировано, когда пользователь выбирает раскрывающийся список, соответствующий определенной группе шаблонов. Я использовал параметр для этого имени @Diagnoses с меткой «Группировка1» (позже будут другие группировки - я собираюсь сделать параметр многозначным) и значением «AB%», «XC%». , но это не работает - отчет запускается, но вообще ничего не возвращает, поэтому ясно, что я делаю что-то не так.

Я пытался избежать указания этих кодов диагностики непосредственно в предложении WHERE, используя " ИЛИ «ключевое слово», поскольку все, что я могу найти в этих строках, похоже, связано с использованием отдельно объявленных функций, и решение по шаблону / перекрестному применению показалось самым удачным.

Может кто-нибудь мне помочь?

Заранее спасибо.

1 Ответ

1 голос
/ 06 февраля 2020

Вы можете использовать JOIN для объединения значений параметров и использовать выражение набора данных для построения текста запроса.

="SELECT x.PatientId FROM (VALUES ('" & JOIN(Parameters!VALUES.Value, "'),('") & "') ) AS v (pattern) " & VBCRLF & 
 "CROSS APPLY " & VBCRLF & 
<rest of your query>

enter image description here

и результирующая часть запроса:

enter image description here

...