У меня есть две таблицы с данными, как показано ниже:
SELECT *
FROM [dbo].[TestTable_1]
ID Value
----------
1 gjha
2 dc
3 d
4 ds
5 dg
6 hn
2-я таблица:
SELECT *
FROM [dbo].[TestTable_2]
Value
-----
jklsa
dfv
b
grt
trj
h
muik
rg
kuu
wd
gb
nm
wef
Я получаю данные в отчете SSRS, как показано ниже:
Вопрос:
Как я могу сохранить размер таблицы одинаковым? То есть, если небольшая таблица в отчете SSRS имеет 6 записей (что в данном случае), большая из них должна иметь тот же размер, что и маленькая, а дополнительные (/больше) записи, которые появляются в большой таблице, должны смещаться вправо.
Вот ожидаемый результат от SSRS
Value Value
-------- -----------------
gjha jklsa |muik | wef
dc dfv |rg |
d b |kuu |
ds grt |wd |
dg trj |gb |
hn h |nm |
Примечание. Приведенные выше сведения приведены только для примера, однако количество записей действительно является динамическим.
Это не полный ответ, так как это только то, что пришло в голову и полностью не проверено.
Прежде всего, нужно найти на SO способы создания таблицы с несколькими столбцами, ответов уже много, поэтому я не буду подробно объяснять здесь. Обычно они включают добавление RowNumber к каждой строке, которую затем можно использовать для вычисления строки матрицы и номера столбца матрицы, номер столбца можно использовать в матрице как группу столбцов. (например, если ограничение на количество строк равно 6, а номер строки равен 14, номер последней строки будет равен 2 (14 mod 6 = 2) и номер столбца равен 3, так как Floor(14/6)+1 = 3.
Затем создайте набор данных, который просто получает наибольшее количество строк из каждой из ваших таблиц. Что-то типа
DECLARE @a int
DECLARE @b int
SELECT @a = COUNT(*) FROM myTableA
SELECT @b = COUNT(*) FROM myTableA
SELECT CASE WHEN @a<=@b THEN @a ELSE @b END AS maxRows
Теперь у вас есть размер наименьшей таблицы, вы можете передать его в качестве параметра процедуре, которая получает фактические данные из двух таблиц (это будет 6 в нашем примере выше).
Не могли бы вы предложить какую-либо ссылку или учебник, чтобы сослаться, пожалуйста? примечание: мой набор данных отличается, и на самом деле есть 3 столбца, эти 3 столбца взяты из 3 разных наборов данных.
Я только что ответил на аналогичный вопрос здесь: https://stackoverflow.com/a/56350614/2033717
Вы можете адаптировать это решение к своей ситуации, заменив 3
в выражениях на:
=Floor(Count(Fields!ColumnName.Value, "Dataset1") / Count(Fields!ColumnName.Value, "Dataset1"))
Другими словами, вы определяете, сколько столбцов вам нужно. А затем сгруппировать каждую строку набора данных в строки и столбцы матрицы. Это будет работать, если вы знаете, что вторая таблица может быть больше первой, но я не уверен, что она будет работать в обоих направлениях без каких-либо дополнительных условий для выражений.
@AskMe у тебя была возможность попробовать это? Если это сработало, пожалуйста, отметьте это как ответ.
что, если обе выбранные таблицы длинные? Но один просто длиннее другого!