目的とこれまでに得たもの
不足している労働トランザクションをチェックするビューを作成しようとしています。ビューは Crystal レポートにフィードされます。
この場合、ビューは sysdate+30 から sysdate -30 までのすべての日付を取得し、それらの日付ごとにアクティブな従業員によるすべての労働記録を外部結合する必要があります。次に、日付ごとに各従業員の労務トランザクション数をカウントします。
これは Crystal Report に渡され、特定の日付範囲 (ビューによる +/- 30 の範囲内) に基づいてフィルター処理されます。そこから、すべての日数が Crystal の従業員ごとに合計され、トランザクションがゼロの従業員が表示されます。
問題
すべての日付のリストを吐き出さずに、最初は日付ごとに労働トランザクションを使用していますが、日付のカウントがないものもあります。これらの人々は、ゼロ時間でヌルの取引日を示しています。これは、期間全体で料金が発生しないことを示しており、これは理にかなっています。
ただし、Crystal がそのデータをフィルター処理して範囲を選択すると、これらの null 値が除外されるため、時間がない人をすべて表示することができないと思います。
質問
ビューで「(sysdate+30) と (sysdate-30) の間のすべての日付を選択する」に相当する方法はありますか?
SQL(参考)
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
;