Независимый отчет по нескольким таблицам в Crystal Reports 11

Я использую Crystal Reports Developer Studio для создания отчета о двух разных таблицах, пусть они будут «ATable» и «BTable». Для моей простейшей задачи я хотел бы сообщить количество каждой таблицы с помощью Total Running Fields. Я создал его для ATable (называется ATableTRF), и когда я публикую его в своем отчете, происходит следующее:

1) SQL-запрос (Показать SQL-запрос) показывает:

SELECT "ATABLE"."ATABLE_KEY"
FROM   "DB"."ATABLE" "ATABLE"

2) Общее количество прочитанных записей - это количество записей в ATable.

3) Число, которое я получаю, верное (общее количество записей в ATable).

То же самое и с BTableTRF, если я удалю ATableTRF, я получу:

1) SQL-запрос (Показать SQL-запрос) показывает:

SELECT "BTABLE"."BTABLE_KEY"
FROM   "DB"."BTABLE" "BTABLE"

2) Общее количество прочитанных записей - это количество записей в BTable.

3) Число, которое я получаю, верное (общее количество записей в BTable).

Проблемы начинаются, когда я просто помещаю оба поля в отчеты. Что происходит, так это то, что я получаю два запроса один за другим (поскольку таблицы не связаны в кристаллических отчетах):

SELECT "ATABLE"."ATABLE_KEY"
FROM   "DB"."ATABLE" "ATABLE"

SELECT "BTABLE"."BTABLE_KEY"
FROM   "DB"."BTABLE" "BTABLE"

И количество прочитанных записей намного больше, чем у каждой из таблиц - это не останавливается. Я бы проверил, что это count (ATable) xcount (BTable), но это превысит ограничение моего компьютера (вероятно - один составляет около 300 тыс. Строк, другой - около 900 тыс. Строк).

Я просто хотел бы сообщить о количестве двух таблиц. Никакого взаимодействия не требуется - но кристалл каким-то образом обеспечивает взаимодействие.

Кто-нибудь может с этим помочь?

Спасибо!


person Tal    schedule 30.01.2012    source источник


Ответы (2)


Если не существует некоторого соединения, описывающего отношения двух таблиц, результатом будет декартово произведение. Попробуйте просто использовать два подзапроса либо с помощью команды SQL, либо как отдельные выражения SQL, чтобы получить количество строк. Бывший:

select count(distinct ATABLE_KEY) from ATABLE

Если вас не интересует что-либо еще в этих таблицах, кроме подсчета строк, то нет причин переносить все эти строки в Crystal - лучше сделать тяжелую работу над РСУБД.

person Ryan    schedule 31.01.2012
comment
Спасибо, Райан. Я присмотрелся и действительно обнаружил, что кристалл выполняет декартово произведение на двух таблицах. Однако мне нужно произвести дополнительные манипуляции с данными. Например, используйте параметры и т. Д. При использовании параметров - я не могу использовать поле выражения SQL или создать сводное представление, чтобы показать, что мне нужно. Тем не менее, мне нужно отчитаться по двум разным таблицам. Есть ли способ сообщить о двух разных таблицах в одном отчете, не выполняя НИКАКОГО соединения? Еще раз спасибо! - person Tal; 02.02.2012
comment
@ user1177650 Это не только Crystal, но и любая РСУБД создаст декартово произведение между таблицами, если связь не определена. Если вы хотите получить данные из двух несвязанных таблиц, вы можете создать команду SQL и написать свои собственные подзапросы в качестве источника данных. Это поддерживает параметры. - person Ryan; 02.02.2012
comment
Спасибо всем. Меня смутил тот факт, что Crystal Reports принудительно применяет соединение, а я не знал об этом. При этом совершенно очевидно, что декартово произведение будет выполнено, если не указан другой метод. На мой взгляд, такое принудительное объединение является огромным недостатком, поскольку оно не позволяет независимо сообщать о двух или более разных таблицах в одном отчете без какой-либо связи между ними. - person Tal; 05.02.2012

Вы можете объединить два запроса. Это даст вам один набор записей, содержащий строки из каждого запроса один раз.

person mbeckish    schedule 09.08.2012