Проблема с левым внешним соединением в Crystal Report

У меня есть следующая информация, и я хочу создать отчет о посещаемости за день. Я объясню концепцию

ID таблицы EMP NAME
1 Hassan

2 Хуссейн

3 Хамид

4 Круз

5 Филипп

Таблица транзакций

Время EmpID

1 5/8/2010 8:00 AM

2 5/8/2010 9:00 AM

3 5/8/2010 10:00 AM

Мой отчет о посещаемости должен выглядеть так

Дата: 08.05.2010

ID ИМЯ СТАТУС

1 подарок Хасана

2 Хуссейн Настоящее время

3 Хамид присутствует

4 Круз Отсутствует

5 Филипп отсутствует

Я попробовал следующее,

1. Создал ссылку с левым внешним соединением, EMP.ID->transcatio.EmpID

2.Группировать по дате из таблицы переводов

  1. Создал формулу для статуса, выглядит так

Если IsNull({transaction.EmpID}), то «Отсутствует», иначе «Присутствует».

Но в отчете отображаются только те сотрудники, у которых есть транзакции на эту дату. Отчет выглядит так,

ID ИМЯ СТАТУС

1 подарок Хасана

2 Хуссейн Настоящее время

3 Hammed Present Похоже, что левое внешнее соединение не сработало.

Заранее спасибо за любую помощь/совет, который вы можете дать.


person andrewsimon    schedule 06.09.2011    source источник


Ответы (3)


Вы смотрели на фактический SQL-запрос, который был сгенерирован? Перейдите в База данных -> Показать SQL-запрос, чтобы увидеть его. Также может быть полезно не использовать группу по дате и посмотреть, что появится.

person HelloW    schedule 06.09.2011

Попробуйте правильное внешнее соединение, используя ту же информацию, которая скажет вам, что оно сделало это в направлении, противоположном тому, что вы хотели.

Вы установили принудительное соединение? Обсуждение принудительной ссылки на переполнение стека

person ifthenelsenull    schedule 04.10.2013

Если вы хотите соединить две таблицы в кристаллическом отчете с пропущенным соединением и в то же время хотите отфильтровать отчет на основе правой таблицы, например. ORDER.ORDER_DATE>='1-JAN-2014' объединение будет преобразовано в эквивалентное соединение для решения проблемы, которую некоторые люди предлагают использовать (ISNULL(ORDER.ORDER_DATE) OR ORDER.RDER_DATE>='1-JAN-2014')

Вышеупомянутое решение работает только тогда, когда у клиента 0 заказов, и вы все еще хотите показать эти кастеры, но что, если у какого-то клиента более 0 заказов, а дата заказов ВКЛЮЧЕНА или ДО «31-DEC-2013». В такой ситуации ISNULL(ORDER.ORDER_DATE) работать не будет. для решения такой проблемы вам нужно либо добавить командный объект, либо создать представление для таблицы заказов, как показано ниже.

  1. Создайте командный объект со следующим sql. Выберите Customer.customer_name, Order.Order_id, order.order_date из левого внешнего заказа на соединение клиента на customer.customer_id=order.Customer_id и order.order_date>='1-JAN-2014'

  2. второе решение — создать представление для заказов, создав или заменив представление view_orderrs, выбрав * из oders, где order.order_dt>='1-JAN-2014', а затем использовать представление в отчете вместо таблицы заказов в качестве правильной таблицы.

person user2832159    schedule 05.02.2015