Я пытаюсь создать представление, которое проверяет отсутствующие трудовые операции. Представление будет передано в отчет Crystal.
В этом случае представление должно брать все даты между sysdate+30 и sysdate -30, а затем левым внешним соединением объединять все трудовые записи по активным сотрудникам для каждой из этих дат. Затем он выдает подсчет количества трудовых операций для каждого сотрудника за каждую дату.
Это передается в Crystal Report, который будет фильтровать на основе определенного диапазона дат (в пределах диапазона +/- 30 по представлению). Отсюда подсчет всех дней будет суммироваться по каждому сотруднику в Crystal, и будут показаны сотрудники, у которых нулевые операции.
Не выплевывая список всех дат, изначально я использую трудовые транзакции для каждой даты, но у некоторых нет подсчетов ни для одной даты. Эти люди показывают нулевые даты транзакций с нулевыми часами. Это указывает на то, что у них нет начислений за весь период, что вполне логично.
Однако, когда Crystal делает фильтр на этих данных и выбирает диапазон, я полагаю, что он оставляет эти нулевые значения, тем самым не позволяя мне показать полный диапазон людей, у которых нет начислений.
Есть ли способ сделать эквивалент "select every date between (sysdate+30) and (sysdate-30)" в представлении, чтобы я мог использовать его для сравнения всего времени?
SELECT QUERY.LABORRECLABORCODE
, QUERY.LABORRECEMPLOYEENUM
, QUERY.PERSONRECDISPLAYNAME
, QUERY.TRANSSTARTDATE
, COUNT(TRANSROWSTAMP) AS ROWCOUNT
FROM (SELECT *
FROM (SELECT LABOR.LABORCODE AS LABORRECLABORCODE
, LABOR.LA20 AS LABORRECEMPLOYEENUM
, PERSON.DISPLAYNAME AS PERSONRECDISPLAYNAME
FROM LABOR
LEFT OUTER JOIN PERSON
ON ( LABOR.LABORCODE = PERSON.PERSONID )
WHERE LABOR.STATUS = 'ACTIVE'
AND LABOR.LA20 IS NOT NULL
AND PERSON.DISPLAYNAME IS NOT NULL
AND LOWER(PERSON.DISPLAYNAME) NOT LIKE '%kimball%'
AND LOWER(PERSON.DISPLAYNAME) NOT LIKE '%electrico%'
AND LOWER(PERSON.DISPLAYNAME) NOT LIKE '%misc labor cost adj%'
AND LOWER(PERSON.DISPLAYNAME) NOT LIKE '%brossoit%'
AND LOWER(PERSON.DISPLAYNAME) NOT LIKE '%brossiot%')PERSONINFO
LEFT OUTER JOIN (SELECT STARTDATE AS TRANSSTARTDATE
, LABORCODE AS TRANSLABORCODE
, ROWSTAMP AS TRANSROWSTAMP
FROM LABTRANS
WHERE STARTDATE BETWEEN ( SYSDATE - 30 ) AND ( SYSDATE + 30 ))LABTRANSLIMITED
ON ( PERSONINFO.LABORRECLABORCODE = LABTRANSLIMITED.TRANSLABORCODE ))QUERY
GROUP BY LABORRECLABORCODE
, TRANSSTARTDATE
, LABORRECEMPLOYEENUM
, PERSONRECDISPLAYNAME
ORDER BY LABORRECLABORCODE
, TRANSSTARTDATE
;