Могут быть и более элегантные способы сделать это, но это все, что я мог придумать ..
Вам необходимо иметь уникальный числовой идентификатор для каждой записи
Предполагая, что вы не можете просто объединить их вместе в запросе к набору данных, если вы можете добавить числовой идентификатор к каждой записи, вы можете сделать это (хотя и немного неуклюже)
Для начала я создал два набора данных ds1
и ds2
для хранения двух списков названий офисов.
Например, первый запрос к набору данных был именно таким ...
DECLARE @t TABLE(OfficeID int, Office varchar(20))
INSERT INTO @t VALUES
(1, 'London'),
(2, 'Liverpool')
SELECT * FROM @t
а второй был такой.
DECLARE @t TABLE(OfficeID int, Office varchar(20))
INSERT INTO @t VALUES
(10, 'Washington'),
(11, 'California')
SELECT * FROM @t
Как видите, теперь у каждого офиса есть уникальный числовой идентификатор
Затем мне понадобился еще один набор данных со списком номеров, который охватывал весь диапазон служебных идентификаторов. В этом примере диапазон составляет всего 20 чисел
примечание: для этой работы на SQL Server для других систем вам потребуется другой способ получения списка чисел
Итак, запрос для dsNums
declare @n table(num int)
insert into @n
select top 20 row_number() over(order by t1.number) as N
from master..spt_values t1
cross join master..spt_values t2
SELECT * FROM @n
Затем я добавил таблицу в отчет, сократил ее до двух столбцов и привязал к dsNums. Первый столбец - это просто поле [num]
.
Второе - это выражение, которое выполняет два поиска и принимает первый непустой результат. Выражение было
=IIF(
LEN(LOOKUP(Fields!num.Value, Fields!OfficeID.Value, Fields!Office.Value, "ds1"))>0
, LOOKUP(Fields!num.Value, Fields!OfficeID.Value, Fields!Office.Value, "ds1")
, LOOKUP(Fields!num.Value, Fields!OfficeID.Value, Fields!Office.Value, "ds2")
)
Если мы запустим отчет сейчас, мы получим ..
Наконец нам нужно скрыть пустые строки. Для этого я установил для выражения Row Visibilty значение
=LEN(ReportItems!LookupResult.Value) = 0
Результат таков (очевидно, вам не нужен столбец num, но это было только для иллюстрации)